shutil模块是一个 高级的文件,文件夹,压缩包处理模块。
包含各种形式的文件和文件夹的拷贝,删除,移动,压缩。
import shutil
-
shutil.copyfileobj(fsrc,fdst[,length])
(循环的)读取文件内容并拷贝到另一个文件中,知道文件最后。可以设置循环的每次读取字符串的长度。(没有文件会创建)import shutil shutil.copyfileobj(open('testfile1.txt','r'), open('testfile2.txt','w')) -
shutil.copyfile(src,dst)
复制文件。如果存在同名文件会覆盖(没有文件会创建)import shutil shutil.copyfile('testfile1.txt', 'testfile2.txt') -
shutil.shutil.copymode(src,dst)
仅拷贝文件的权限。内容,所有者等文件信息不变。(dst不存在会报错)import shutil shutil.copymode('testfile1.txt', 'testfile2.txt') -
shutil.copystat(src,dst)
拷贝状态信息(不拷贝内容),包括:mode,bits,atime,mtime,flags。文件的属组(所有者)不拷贝(dst不存在会报错)import shutil shutil.copystat('testfile1.txt', 'testfile2.txt') -
shutil.copy(src,dst)
拷贝文件和权限。copyfile + copymode -
shutil.copy2(src,dst)
拷贝文件和状态信息。copyfile + copystat -
shutil.ignore_patterns(*patterns)
.copytree(src,dst,symlinks=False,ignore=None)
递归的去拷贝文件import shutil shutil.copytree('testfile1.txt', 'testfile2.txt', ignore=shutil.ignore_patterns('*.pyc','tmp*')) #拷贝整个目录,并且忽略*.pyc和tmp* -
shutil.rmtree(path[,ignore_errors[,onerror]])
递归取删除文件 -
shutil.move(src,dst)
递归的移动文件,并删除指定的src文件夹。dst文件夹不存在则创建可以用于父级文件夹的重命名
-
shutil.make_archive(base_name,format,...)
创建压缩包并返回文件路径(递归压缩)。例如:zip,tar- 参数:
- base_name:压缩包的文件名,也可以是压缩包的路径。只传文件名时,则保存至当前目录,否则保存到指定路径。
- format:压缩包种类,'zip','tar','bztar','gztar'
- root_dir:要压缩的文件夹路径(默认当前目录)
- owner:用户,默认当前用户
- group:组,默认当前组
- logger:用于记录日志,通常是logging.Logger对象
import shutil # 将 '/Users/xxx/Downloads/test' 压缩打包,命名为wwwww,保存在当前目录。注意防止转义,我们在字符串前放一个'r' ret = shutil.make_archive('wwwww','gztar',root_dir=r'/Users/xxx/Downloads/test') # 将 '/Users/xxx/Downloads/test' 压缩打包,保存为'/Users/xxx/ww' ret = shutil.make_archive(r'/Users/xxx/ww','gztar',root_dir=r'/Users/xxx/Downloads/test') # 用关键字的例 ret = shutil.make_archive(base_name='zipfile',format='zip',root_dir=r'C:/Users/kouneli/Desktop/python/temp/')shutil对压缩包的处理是调用zipfile(压缩)和tarfile(打包)两个模块来实现的
- 参数:
扩展:
1. zipfile模块:压缩,解压
zipfile模块用于压缩和解压文件。
注意:zipfile不能直接递归压缩文件夹,需要遍历压缩。
- 使用例:
import zipfile import os # 压缩 # z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'w') # 生成压缩用的对象 # z.write('file1.txt') # 压入文件 # z.close() # 进行压缩 # 递归压缩的实现 z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'w') # 生成压缩用的对象 src_dir = os.walk(r'C:\Users\kouneli\Desktop\python\homework') # 返回的是(路径,路径内的文件夹,路径内的文件),(子路径,子路径内的文件夹,子路径内的文件)元组组成的iter对象 # print(list(src_dir)) # 转成列表形式看下返回值 filelist = [] for root_dir, dirs, files in src_dir: for filename in files: filelist.append(os.path.join(root_dir,filename)) # 把文件的路径和文件名拼接起来(拼成结对路径),然后放入列表中。 for i in filelist: print(i) z.write(i) # 压入压缩包文件 z.close() # 关闭压缩包文件 # 解压 z = zipfile.ZipFile(r'C:\Users\kouneli\Desktop\test_zip.zip', 'r') # 生成解压对象,主要是'r'模式 z.extractall(path= r'C:\Users\kouneli\Desktop\extra_zip') # 解压到的路径 z.close()
2. tarfile模块:打包
tarfile的作用是给文件打包,并不压缩。
其用法类似于zipfile,这里我们不予举例。

浙公网安备 33010602011771号