You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何实现ZIP文件有效压缩?使用zipfile和shutil无压缩效果怎么办

Python生成ZIP压缩包无明显压缩效果的解决方法

首先明确前提:如果待压缩的文件本身是已经经过高压缩处理的格式(如JPG/PNG图片、MP4/MP3音视频、RAR/7Z压缩包、加密PDF文档等),任何ZIP压缩算法都不会带来明显的体积下降,甚至可能因为增加了ZIP文件头信息导致体积略涨,这种情况不存在优化空间。

如果待压缩的是可压缩格式(如纯文本、代码、未压缩的办公文档等),可以通过以下方式优化压缩效果:

  • 调整压缩级别
    Python的zipfile默认使用的压缩等级为6(等级范围0~9,0为无压缩,9为最高压缩比),你可以手动指定compresslevel=9获取最高压缩率:
    zipfile修改示例:
    with zipfile.ZipFile(f'{directory_name}.zip', 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
    
    shutil.make_archive修改示例(Python3.7及以上版本支持):
    shutil.make_archive(directory_path, 'zip', directory_path, compresslevel=9)
    
  • 补全完整的文件写入逻辑
    你贴出的zipfile代码仅包含压缩包初始化部分,需要确认你后续有完整遍历目标目录下的所有文件并写入压缩包,避免漏加文件导致压缩比异常,完整实现参考:
    import os
    import zipfile
    
    def compress_dir(source_dir, output_zip):
        with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as zipf:
            for root, _, files in os.walk(source_dir):
                for file in files:
                    full_path = os.path.join(root, file)
                    # 保持压缩包内的相对目录结构,避免生成绝对路径层级
                    arc_path = os.path.relpath(full_path, os.path.dirname(source_dir))
                    zipf.write(full_path, arcname=arc_path)
    
  • 更换更高压缩比的算法
    如果兼容问题可以接受,可以选择ZIP支持的BZIP2或LZMA算法,相比默认的DEFLATED算法压缩率更高,仅需修改压缩方法参数即可:
    BZIP2算法示例:
    with zipfile.ZipFile(f'{directory_name}.zip', 'w', zipfile.ZIP_BZIP2, compresslevel=9) as zipf:
    
    LZMA算法示例:
    with zipfile.ZipFile(f'{directory_name}.zip', 'w', zipfile.ZIP_LZMA, compresslevel=9) as zipf:
    
    注意:这两种算法压缩耗时更长,且部分低版本解压工具可能不支持

内容的提问来源于stack exchange,提问作者Shagun Chawla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:06:01