【zipfile】Python實現將文件打包爲zip壓縮包 & 解壓

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章