os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块。shutil模块是对os模块中文件操作的补充,是Python自带的关于文件、文件夹、压缩文件的高层次的操作工具,类似于高级API。
1.移动文件或文件夹
使用shutil.move函数可以将指定的文件或文件夹移动到目标路径下,返回值是移动后的文件绝对路径字符串。
>>> importshutil
>>>shutil.move('C:\\Users\\45543\\Desktop\\程序\\pi_digits.txt', 'C:\\Users\\45543\\Desktop')
'C:\\Users\\45543\\Desktop\\pi_digits.txt'
如果目标路径指向的文件夹中已经存在了同名文件,那么该文件将被重写;如果目标路径指向一个具体的文件,那么指定的文件在移动后将被重命名。
>>> importshutil
>>>shutil.move('C:\\Users\\45543\\Desktop\\pi_digits.txt','C:\\Users\\45543\\ MyText.txt')
'C:\\Users\\45543\\MyText.txt'
注意:目标路径下的文件夹必须是已经存在的,否则程序会返回错误。
2.复制文件
shutil.copyfile(src,dst)可以从src文件复制内容(不包含元数据)到dst文件。dst必须是完整的目标文件名。返回值是复制后的文件绝对路径字符串。
>>> importshutil
>>>shutil.copyfile('Ch7.py', 'Ch7.py.copy')
'Ch7.py.copy'
如果src和dst是同一文件,就会引发错误shutil.Error。dst文件必须是可写的,否则将引发异常IOError。如果dst文件已经存在,则它会被替换。对于特殊文件,例如字符或块设备文件和管道不能使用此功能,因为copyfile会打开并读取文件。
shutil.copy(src,dst)可以复制文件src到文件或目录dst。如果dst是目录,则会使用src相同的文件名创建(或覆盖),文件权限也会复制,返回值是复制后的文件绝对路径字符串。
>>> import shutil
>>>shutil.copy('C:\\Users\\45543\\Desktop\\pi_digits.txt', 'C:\\Users\\45543\\MyFile.txt')
'C:\\Users\\45543 \\MyFile.txt'
shutil模块还提供了shutil.copytree函数用于进行目录的复制。
>>> import shutil
>>>shutil.copytree('C:\\Users\\45543\\Desktop\\程序','C:\\Users\\45543\\test')
'C:\\Users\\45543\\test'
注意:test文件夹必须事先不存在。
3.永久删除文件和文件夹
使用os.unlink函数会删除指定的文件;使用os.rmdir函数会删除路径指定的文件夹,但是这个文件夹必须是空的,不能包含任何文件或子文件夹;使用shutil.rmtree函数可以删除路径指定的文件夹,并且这个文件夹里面的所有文件和子文件夹都会被删除。
因为涉及对文件与文件夹的永久删除,因此以上函数的使用必须要非常谨慎。
>>> import shutil
>>>import os
>>>os.unlink('C:\\Users\\45543\\Desktop\\Delect')
Traceback (most recent call last):
File"
os.unlink('C:\\Users\\45543\\Desktop\\Delect')
PermissionError: [WinError 5] 拒绝访问。: 'C:\\Users\\45543\\Desktop\\Delect'
>>>os.rmdir('C:\\Users\\45543\\Desktop\\Delect')
Traceback (most recent call last):
File"
os.rmdir('C:\\Users\\45543\\Desktop\\Delect')
OSError: [WinError 145] 目录不是空的。: 'C:\\Users\\45543\\Desktop\\Delect'
>>>shutil.rmtree('C:\\Users\\45543\\Desktop\\Delect')
4.压缩与解压文件
Python 2.7版本之后就提供了使用shutil模块实现文件压缩与解压的功能。shutil.make_archive函数的相关参数设置如下表所示。
shutil.make_archive函数的相关参数
参 数 |
说 明 |
base_name |
压缩包的文件名,也可以是压缩包的路径,是文件名时,则保存至当前目录,否则保存至指定路径 |
format |
压缩包种类,可以是zip、tar、bztar、gztar |
root_dir |
要压缩的文件夹路径(默认当前目录) |
owner |
用户,默认当前用户 |
group |
组,默认当前组 |
logger |
用于记录日志,通常是logging.Logger对象 |
shutil.make_archive函数将test.zip压缩包中的文件解压到了指定路径(C:\\Users\\45543\\Desktop)下的test文件夹里。对压缩文件进行解压处理,需要用到shutil.unpack_archive函数。
>>> import shutil
>>>shutil.make_archive("C:\\Users\\45543\\Desktop\\test", 'zip',root_dir= 'C:\\Users\\45543\\Desktop\\程序')
>>>shutil.unpack_archive('C:\\Users\\45543\\Desktop\\test.zip', 'C:\\Users\\ 45543\\Desktop\\test')
文章未经博主同意,禁止转载!