用Python将文件进行压缩,可以使用 zipfile库,提供了非常丰富的API。zipfile
本身是上下文管理器, 可以使用with
。以下为自己简单写的Demo。
打包
import os
import zipfile
def file2zip(zip_file_name: str, file_names: list):
""" 将多个文件夹中文件压缩存储为zip
:param zip_file_name: /root/Document/test.zip
:param file_names: ['/root/user/doc/test.txt', ...]
:return:
"""
# 读取写入方式 ZipFile requires mode 'r', 'w', 'x', or 'a'
# 压缩方式 ZIP_STORED: 存储; ZIP_DEFLATED: 压缩存储
with zipfile.ZipFile(zip_file_name, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
for fn in file_names:
parent_path, name = os.path.split(fn)
# zipfile 内置提供的将文件压缩存储在.zip文件中, arcname即zip文件中存入文件的名称
# 给予的归档名为 arcname (默认情况下将与 filename 一致,但是不带驱动器盘符并会移除开头的路径分隔符)
zf.write(fn, arcname=name)
# 等价于以下两行代码
# 切换目录, 直接将文件写入。不切换目录,则会在压缩文件中创建文件的整个路径
# os.chdir(parent_path)
# zf.write(name)
if __name__ == "__main__":
zip_name = '/root/Document/test.zip'
files = ['/root/user/doc/test.txt', '/root/user/doc/test1.txt']
file2zip(zip_name , files)
解压
def zip2file(zip_file_name: str, extract_path: str, members=None, pwd=None):
""" 压缩文件内容提取值指定的文件夹
:param zip_file_name: 待解压的文件 .zip r'D:\Desktop\tst.zip'
:param extract_path: 提取文件保存的目录 r'D:\Desktop\tst\test\test'
:param members: 指定提取的文件,默认全部
:param pwd: 解压文件的密码
:return:
"""
with zipfile.ZipFile(zip_file_name) as zf:
zf.extractall(extract_path, members=members, pwd=pwd)
python文件压缩
zipfile.PyZipFile
继承自zipfile.ZipFile
,具有特殊的 writepy
实现对.py
.pyc
的打包