shutil模块是一个 高级的文件,文件夹,压缩包处理模块。
包含各种形式的文件和文件夹的拷贝,删除,移动,压缩。
import shutil
shutil.copyfileobj(fsrc,fdst[,length]) (循环的)读取文件内容并拷贝到另一个文件中,知道文件最后。可以设置循环的每次读取字符串的长度。(没有文件会创建)
python import shutil shutil.copyfileobj(open('testfile1.txt','r'), open('testfile2.txt','w'))
shutil.copyfile(src,dst) 复制文件。如果存在同名文件会覆盖(没有文件会创建)
python import shutil shutil.copyfile('testfile1.txt', 'testfile2.txt')
shutil.shutil.copymode(src,dst) 仅拷贝文件的权限。内容,所有者等文件信息不变。(dst不存在会报错)
python import shutil shutil.copymode('testfile1.txt', 'testfile2.txt')
shutil.copystat(src,dst) 拷贝状态信息(不拷贝内容),包括:mode,bits,atime,mtime,flags。文件的属组(所有者)不拷贝(dst不存在会报错)
python 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) 递归的去拷贝文件
python 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对象
```python
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不能直接递归压缩文件夹,需要遍历压缩。
使用例:
```python
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,这里我们不予举例。