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

上一篇:Python Threading 线程/互斥锁/死锁/GIL锁


下一篇:C# 递归压缩服务器文件夹及文件并下载