用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
的打包