Python文件目录操作
笨牛慢耕 人气:0Python中用于文件目录操作的常用模块有os, shutil,pathlib等.
os就是“Operating System”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面也可以提高代码的可移植性,方便代码跨操作系统平台使用。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。
shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
1. os模块
Python的os模块封装了常见的文件和目录操作。
通常来说,不建议用from os import *来导入os模块。os模块中有些函数与python内置函数重名,比如说open()。这种方式导入时,os.open就把python内置open()覆盖了。
如果是读写文件的话,建议使用内置函数open();如果是路径相关的操作,建议使用os的子模块os.path;如果要逐行读取多个文件,建议使用fileinput模块;要创建临时文件或路径,建议使用tempfile模块;要进行更高级的文件和路径操作则应当使用shutil模块。
使用os模块可以写出操作系统无关的代码。但是os也可以调用一些特定系统的扩展功能,但要切记一点:一旦这样做就会极大损害代码的可移植性。
1.1 获取系统信息
判断使用的平台:字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix'。有时候给出的信息不够细。
# 获取平台名称. 注意这个不是函数,所以不需要带括号() os.name # 获取系统的核心数 os.cpu_count() # 改变权限 os.chmod(path, mode)
1.2 工作目录与路径相关的操作
# 获取路径和文件名等 os.getcwd() #函数得到当前工作目录,即当前Python脚本工作的目录路径 os.path.abspath($name) #当前目录下文件或文件夹的绝对路径 os.path.basename(path) #返回文件名 os.path.dirname(path) #返回文件的上级路径 os.path.split() #分离文件名和上级路径 os.path.join() #合并文件名和指定路径 os.path.splitext() #分离文件名与扩展名,返回的扩展名包括了'.'符号,默认只返回第一个'.后缀'和前缀。 # 改变工作目录到dirname os.chdir(dirname) # 该函数相当于linux命令“ls”,列举出指定目录中的内容。其返回值是一个列表。列表中的每一格元素表示一个子目录名,或者一个文件名 os.listdir(path) # 创建一个目录 os.mkdir(path) # 删除一个目录 os.rmdir(path) # 重命名 os.rename(src, dst) # 获取文件大小信息 os.path.getsize(name) #获得文件大小,如果name是目录返回0L
1.3 判断是否文件或目录以及指定文件目录是否存在
#函数分别检验给出的路径是一个文件? os.path.isfile() #函数分别检验给出的路径是一个目录? os.path.isdir() #函数用来检验给出的路径是否真地存在 os.path.exists()
1.4 删除一个文件或者目录
Ref: How to delete a file or folder in Python? - Stack Overflow
# 删除一个文件 os.remove() # 删除一个文件 os.unlink() # 删除一个空目录,如果不是空目录会报错 os.rmdir()
BTW, 除了OS模块外,shutil和pathlib也提供了相应的函数。
# 删除目录,包括其中的文件以及子目录,需要小心使用 shutil.rmtree() # removes a file or symbolic link. pathlib.Path.unlink() # removes an empty directory. pathlib.Path.rmdir()
1.5 串连创建或者分离一个文件目录路径
#os.path.join(datadir,file) #与直接字符串连接不同的是,'D:/tmp'即可,不需要'D:/tmp/' os.path.join('D:/tmp','tmp.txt') # 返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体。此处只是把前后两部分分开而已。就是找最后一个'/'。 os.path.split(path)
1.6 执行外部shell命令
os.system(cmd) #执行外部shell命令。
2. shutil模块
shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
2.1 拷贝文件
shutil会自动识别拷贝的到底是文件还是文件夹, 如果存在同名的文件将会自动进行覆盖。
shutil.copy($file_path, $dir_path)
2.2 移动或重命名文件
如果路径下已有重名的文件,将报错!
shutil.move($file_path, $dir_path) # 移动到另外一个文件夹中 shutil.move($file_path, $new_file_path) # 重命名为新的绝对路径
2.3 拷贝文件夹/删除文件夹
shutil.copytree($file_path, $dir_path) # 拷贝所有文件到新的文件夹下,保持原有的文件结构。 shutil.rmtree($dir_path) # 删除此路径的文件夹
2.4 生成压缩文件
shutil.make_archive(base_name, 'gztar', root_dir, [base_dir)
base_name : 创建的目标文件名,包括路径,减去任何特定格式的扩展。
format : 压缩包格式。”zip”, “tar”, “bztar”或”gztar”中的一个。
root_dir : 需要打包的文件夹路径。打包完成时存储在上一级目录。
base_dir : 使用后会将base_dir作为路径,解压后有个有层级的文件夹,而仅非只有单独的打包内容。
2.5 解压文件
shutil.unpack_archive(filename[, extract_dir[, format]])
filename是压缩文档的完整路径
extract_dir是解压缩路径,默认为当前目录。
format是压缩格式。默认使用文件后缀名代码的压缩格式。”zip”, “tar”, “bztar”或”gztar”中的一个。
加载全部内容