shutil模块
提供了大量的文件的高级操作,特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作
常用方法
- shutil.copyfile(src, dst) 复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为copyfile会打开并阅读文件。 src和dst的是字符串形式的路径名
- shutil.copyfileobj(fsrc, fdst[, length]) 复制文件内容,从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存。注意:拷贝是从fsrc的当前文件开始
- shutil.copymode(src,dst) 拷贝权限,不包括属主和属组
- shutil.copy(src,dst) 拷贝文件,包括权限
- shutil.copy2(src,dst) 拷贝文件,包括权限和状态信息 类似于Unix命令cp -p
- shutil.copystat(src, dst) 拷贝文件状态
- shutil.chown(name,user,group) 改变用户属主属组
举例:
import shutil shutil.copyfile('test.xml','testxml.xml') #拷贝文件 shutil.copyfile('test.xml','testxml2.xml') #拷贝文件 shutil.copyfileobj(open('test.xml','r'),open('test1.xml','w')) #拷贝文件内容 shutil.copymode('test.xml','testxml.xml') #将test.xml文件的权限拷贝给testxml.xml shutil.copy('test.xml','test3.xml') #拷贝文件和权限 shutil.copy2('test.xml','test4.xml') #拷贝文件和状态 结果: -rwxrwxrwx 1 root staff 690 6 19 11:13 test.xml #源文件 -rwxrwxrwx 1 fuzengjie staff 690 6 22 17:50 testxml.xml* #copyfile 的结果,又经过了copymode处理,权限改变,状态改变 -rw-r--r-- 1 fuzengjie staff 690 6 22 17:50 testxml2.xml #copyfile 的结果,元数据没有拷贝 -rw-r--r-- 1 fuzengjie staff 690 6 22 17:50 test1.xml #copyfileobj 的结果,元数据没有拷贝**** -rwxrwxrwx 1 fuzengjie staff 690 6 22 17:50 test3.xml* #copy的结果,权限没变,状态改变 -rwxrwxrwx 1 fuzengjie staff 690 6 19 11:13 test4.xml* #copy2的结果,权限和状态都没变
- shutil.ignore_patterns(*patterns) 忽略某些文件
- shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件,dst必须是不存在的一个目录
>>> shutil.copytree('day07','test', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #拷贝day07目录为test 'test'
- shutil.rmtree 删除目录
shutil.rmtree("test")
- shutil.move(src,dst) 移动目录
-
shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,
dry_run=0, owner=None, group=None, logger=None)- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/beyond/www =>保存至/Users/beyond/
- format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
>>> shutil.make_archive("test",'tar',root_dir='day07') '/Users/fuzengjie/Git/gitlab/study/code/test.tar' >>> shutil.make_archive("test",'zip',root_dir='day07') '/Users/fuzengjie/Git/gitlab/study/code/test.zip'
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的。下面介绍两个模块的使用
- zipfile()
import zipfile z = zipfile.ZipFile("test.zip",'w') #创建压缩文件 z.write('newtest.xml') #将需要压缩的文件写入压缩文件 z.write('test.xml') z.close() z = zipfile.ZipFile("test.zip",'r') #读压缩文件 file_list = z.namelist() #获取压缩文件中的文件列表 z.extract('test1.xml') #解压单个文件 #z.extractall() #解压所有文件
- tarfile()
import tarfile t = tarfile.open("test.tar","w") t.add("test.xml",arcname="aaaaaa") #添加文件到压缩文件中,并取名aaaaa t.add("test.xml",arcname="bbb") #添加文件到压缩文件中,并取名bbb t.close() t = tarfile.open("test.tar",'r') s = t.getnames() #获取压缩文件中的文件列表 t.extract('bbb') #解压bbb文件 #t.extractall() #解压所有文件 print(s)