python - zipfile模块

 

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)
# <ZipInfo filename='a2.txt' filemode='-rw-rw-rw-' file_size=43>

# 将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方法保存

 

posted @ 2018-12-25 00:58  Anec  阅读(525)  评论(0编辑  收藏  举报