- shutil.copyfile( src, dst) #从源src复制到dst中去。 如果当前的dst已存在的话就会被覆盖掉
- shutil.move( src, dst) #移动文件或重命名
- shutil.copymode( src, dst) #只是会复制其权限其他的东西是不会被复制的
- shutil.copystat( src, dst) #复制权限、最后访问时间、最后修改时间
- shutil.copy( src, dst) #复制一个文件到一个文件或一个目录
- shutil.copy2( src, dst) #在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
- shutil.copy2( src, dst) #如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
- shutil.copytree( olddir, newdir, True/Flase) #把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
- shutil.rmtree( src ) #递归删除一个目录以及目录内的所有内容
os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块。shutil模块是对os模块中文件操作的补充,是Python自带的关于文件、文件夹、压缩文件的高层次的操作工具,类似于高级API。
1、移动文件或文件夹
使用shutil.move函数可以将指定的文件或文件夹移动到目标路径下,返回值是移动后的文件绝对路径字符串。
import shutil
shutil.move('D:\\test\\a\dog.txt', 'D:\\test\\b')
如果目标路径指向的文件夹中已经存在了同名文件,那么该文件将被重写;如果目标路径指向一个具体的文件,那么指定的文件在移动后将被重命名。
注意:目标路径下的文件夹必须是已经存在的,否则程序会返回错误。
2、复制文件
shutil.copyfile(src,dst)可以从src文件复制内容(不包含元数据)到dst文件。dst必须是完整的目标文件名,返回值是复制后的文件绝对路径字符串。
import shutil
shutil.copyfile('D:\\test\\a\dog2.txt', 'D:\\test\\b\dog1.txt')
如果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('D:\\test\\a','D:\\test\c')
注意:test文件中不存在c。
3、永久删除文件和文件夹
使用os.unlink函数会删除指定的文件;
使用os.rmdir函数会删除路径指定的文件夹,但是这个文件夹必须是空的,不能包含任何文件或子文件夹;
使用shutil.rmtree函数可以删除路径指定的文件夹,并且这个文件夹里面的所有文件和子文件夹都会被删除。
因为涉及对文件与文件夹的永久删除,因此以上函数的使用必须要非常谨慎。
import shutil
import os
os.unlink('D:\\test\c')
Traceback (most recent call last):
File "D:/test/test.py", line 5, in <module>
os.unlink('D:\\test')
PermissionError: [WinError 5] 拒绝访问。: 'D:\\test'
os.rmdir('D:\\test\c')
Traceback (most recent call last):
File "D:/test/test.py", line 7, in <module>
os.rmdir('D:\\test')
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'D:\\test'
shutil.rmtree('D:\\test\c')
如果存在以下树结构
- user
- tester
- noob
- developer
- guru
即 user 目录下存在多级子目录
如果要递归删除user\tester 目录的内容,可使用shutil.rmtree()函数
import shutil
shutil.rmtree(r'user\tester')
mkdir -p foo/bar
python
import shutil
shutil.rmtree('foo/bar')
将会仅仅删除bar
4、压缩与解压文件
Python 2.7版本之后就提供了使用shutil模块实现文件压缩与解压的功能。shutil.make_archive函数的相关参数设置如下表所示。shutil.make_archive函数将test.zip压缩包中的文件解压到了指定路径(C:\\Users\\45543\\Desktop)下的test文件夹里。对压缩文件进行解压处理,需要用到shutil.unpack_archive函数。
shutil.make_archive函数的相关参数
参数说明 | 功能 |
base_name | 压缩包的文件名,也可以是压缩包的路径,是文件名时,则保存至当前目录,否则保存至指定路径 |
format | 压缩包种类,可以是zip、tar、bztar、gztar |
root_dir | 要压缩的文件夹路径(默认当前目录) |
owner | 用户,默认当前用户 |
group | 组,默认当前组 |
logger | 用于记录日志,通常是logging.Logger对象 |
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')
import shutil
shutil.move('D:\\test\\a\dog.txt', 'D:\\test\\b')
import shutil
shutil.copyfile('D:\\test\\a\dog2.txt', 'D:\\test\\b\dog1.txt')
import shutil
shutil.copy('C:\\Users\\45543\\Desktop\\pi_digits.txt', 'C:\\Users\\45543\\MyFile.txt')
'C:\\Users\\45543 \\MyFile.txt'
import shutil
shutil.copytree('D:\\test\\a','D:\\test\c')
import shutil
import os
os.unlink('D:\\test\c')
Traceback (most recent call last):
File "D:/test/test.py", line 5, in <module>
os.unlink('D:\\test')
PermissionError: [WinError 5] 拒绝访问。: 'D:\\test'
os.rmdir('D:\\test\c')
Traceback (most recent call last):
File "D:/test/test.py", line 7, in <module>
os.rmdir('D:\\test')
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'D:\\test'
shutil.rmtree('D:\\test\c')
- user
- tester
- noob
- developer
- guru
import shutil
shutil.rmtree(r'user\tester')
mkdir -p foo/bar
python
import shutil
shutil.rmtree('foo/bar')
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')