import zipfile # f=zipfile.ZipFile(filename, mode="r", compression=ZIP_STORED, allowZip64=False) # filename是一个文件的路径 # mode a :追加模式 # mode r :只读模式 # mode w :写入模式 # allowZip64:是个bool型变量,当设置为True的时候就是说可以用来创建大小大于2G的zip文件,默认值是True; # 可判断是否是压缩文件: # zipfile.is_zipfile(filename) # 将多个文件压缩成一个文件. # with zipfile.ZipFile('test2.zip', mode='w') as zipf: # zipf.write('a2.txt') # zipf.write('a3.txt') # zipf.write('a4.txt') # zipf.write('a.txt') # 将文件解压到 abc文件内(当前文件下的abc文件) # with zipfile.ZipFile('test.zip') as zipf: # zipf.extractall('abc') # 获取压缩包内的文件名: # with zipfile.ZipFile('test.zip','r') as zipf: # for i in zipf.namelist(): # print(i) # 获取压缩包内的文件对象,可查看文件名,大小,mode # with zipfile.ZipFile('test.zip','r') as zipf: # for i in zipf.infolist(): # print(i) ## 将zip文件的目录结构打印到stdout上,包括每个文件的path,修改时间和大小 # with zipfile.ZipFile('test.zip','r') as zipf: # zipf.printdir() # 打开压缩文件中的一个文件 # with zipfile.ZipFile('test.zip') as zipf: # info = zipf.open("a.txt",'r') # print(info.read())
四种压缩模式:
import zipfile"""ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib), | ZIP_BZIP2 (requires bz2) or ZIP_LZMA (requires lzma).""" # ZIP_STORED # with zipfile.ZipFile('a.zip','w',compression=0) as z: # z.write('a1.txt') # z.write('a2.txt') # z.write('a3.txt') # ZIP_LZMA # with zipfile.ZipFile('b.zip','w',compression=zipfile.ZIP_DEFLATED) as z: # z.write('a1.txt') # z.write('a2.txt') # z.write('a3.txt') # ZIP_BZIP2 # with zipfile.ZipFile('c.zip','w',compression=zipfile.ZIP_BZIP2) as z: # z.write('a1.txt') # z.write('a2.txt') # z.write('a3.txt') # ZIP_LZMA # with zipfile.ZipFile('d.zip','w',compression=zipfile.ZIP_LZMA) as z: # z.write('a1.txt') # z.write('a2.txt') # z.write('a3.txt')
压缩效果:
如何压缩目录以及目录内的文件:
注意:
直接压缩文件的目录,那么压缩内只有压缩的目录,却没目录下的文件。
这里要用到os.walk 文件遍历的方法。
top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
# with zipfile.ZipFile('CC2.zip','w',compression=zipfile.ZIP_DEFLATED) as z: # for root, dirs, files in os.walk(r".\text", topdown=False): # for name in files: # print(os.path.join(root, name)) # z.write(os.path.join(root, name))
os.path.join(root, name) 拼接目录下的文件路径,然后传递给zipfile.write方法保存