本文介绍shutil模块。
- shutil模块:文件和目录的复制、移动、删除、压缩、解压等高级处理
- shutil模块的主要作用是“复制文件”
一、复制文件
1.1介绍“文件”的一些信息
文件的信息大致可分为:文件的内容和文件的状态。
而文件的状态包括:权限,组,用户和时间等。
详情参见:https://blog.csdn.net/gui951753/article/details/79078682
1.2一些常见函数
1.2.1文件内容的复制(覆盖形式)
PS:所有的复制功能函数如shutil.copy(),shutil.copy2()等都无法复制文件的所有元数据。
(1)shutil.copyfileobj(f1,f2):将f2的内容以覆盖的形式写入f1中
import shutil
f1 = open('file1.txt',encoding = 'utf-8')
f2 = open('file2.txt',encoding = 'utf-8')
shutil.copyfileobj(f1,f2)
- 参数f1,f2是在调用方法前就打开的文件对象
- f2必须是可以”写入“的
(2)shutil.copyfile(f1,f2):将f2的内容以覆盖的形式写入f1中
shutil.copyfile(f1,f2)
- 与上面一种方法不同的是,在调用方法前无须打开文件。直接用文件名进行覆盖。
- 从源码可知,实现原理是调用了shutil.copyfileobj()函数
- 返回一个file类型参数——file2
1.2.2文件权限的复制
shutil.copymode(f1,f2):仅复制文件的权限,不更改文件的内容,组,和用户,无返回对象
ps:mode的意思是"模式,样式“——游客模式和管理员模式,也即管理员权限。
1.2.3文件状态的复制
shutil.copystat(f1,f2):复制文件的所有状态信息,包括权限,组,用户,时间.无返回对象
PS:stat是指state:状态,状况,情况
1.2.4复制文件的内容和权限
(1)仅复制文件内容和权限
shutil.copy(f1,f2):复制文件的内容和权限,相当于先执行copyfile()后再执行copymode()。返回file类对象f2。
(2)复制文件内容和文件的所有状态信息
shutil.copy2(f1,f2):复制文件的内容和文件的所有状态信息,相当于先执行copyfile()再执行copystat(),返回file类对象f2。
1.2.5递归地复制文件内容以及状态信息
shutil.copytree()
参考https://blog.csdn.net/nkguohao/article/details/44412975
二.移动文件
shutil.move(src,dst,copy_function=copy2)函数可以递归地移动文件或重命名
三.读取压缩及归档压缩文件
shutil.make_archive(base_name,format,....)用于创建归档文件
base_name是需要创建的文件名称,包括路径,要减去任何特定格式的扩展名。
四.解压文件
shutil.unpack_aechive(filename[,extract_dir[,format]])拆分归档。
filename为归档的完整路径;extract_dir为解压归档的目标目录名称,默认当前目录;格式是文件存档格式、zip、tar或者其他。
注:shutil还有一些不常用功能,如获取终端窗口大小,引发同一文件异常等。