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

Python中如何实现兼顾速度与压缩率的文件压缩归档?

兼顾压缩速度与压缩率的Python压缩方案

针对你当前用shutil.make_archive处理ZIP压缩速度慢、无法支持大文件的问题,以下是直接可用的优化方案:

一、先解决ZIP本身的速度瓶颈

shutil.make_archive的ZIP实现是单线程的,且默认压缩级别偏保守,这是速度慢的核心原因。直接换用支持多线程的工具或库,即使继续用ZIP格式也能大幅提速:

用7-Zip命令行调用ZIP(推荐,速度最快)

7-Zip对ZIP格式的多线程支持非常成熟,平衡模式下速度是shutil的3-5倍,压缩率也更好:

import subprocess

def zip_with_7zip(source_dir, output_zip):
    # -mx3:平衡压缩率与速度;-mmt=on:启用多线程(自动用全部CPU核心)
    subprocess.run(
        ["7z", "a", "-tzip", "-mx3", "-mmt=on", output_zip, source_dir],
        check=True,
        stdout=subprocess.DEVNULL,  # 屏蔽输出,UI应用更友好
        stderr=subprocess.DEVNULL
    )

二、更优的压缩格式选择(兼顾速度与压缩率)

如果可以更换格式,以下两个选项比ZIP更适合你的需求:

1. 7Z格式(LZMA2算法)

7Z的LZMA2天生支持多线程,平衡模式(预设3)下,压缩率比ZIP高10%-20%,速度和ZIP平衡模式相当;最快模式(预设1)下速度接近文件复制,压缩率仍优于ZIP最快模式。用py7zr库可以纯Python调用,无需依赖7-Zip命令行:

import py7zr

def compress_7z(source_dir, output_7z):
    # preset=3:平衡模式;threads=-1:用全部CPU核心
    with py7zr.SevenZipFile(
        output_7z, 
        'w', 
        filters=[{'id': 'LZMA2', 'preset': 3, 'threads': -1}]
    ) as szf:
        szf.writeall(source_dir)

2. ZSTD格式(Zstandard)

ZSTD是专为速度与压缩率平衡设计的算法,快速模式下速度是ZIP的5-10倍,压缩率接近7Z平衡模式;即使高压缩率模式,速度也远超7Z。需要先安装zstandard库(pip install zstandard),示例代码:

import zstandard as zstd
import shutil
import os

def compress_zstd(source_dir, output_zst):
    # 先打包为tar(ZSTD是单文件压缩算法,需配合tar处理文件夹)
    temp_tar = output_zst + ".tar"
    shutil.make_archive(temp_tar.rsplit('.', 1)[0], 'tar', source_dir)
    
    # ZSTD压缩,level=3:平衡模式;threads=-1:用全部CPU核心
    cctx = zstd.ZstdCompressor(level=3, threads=-1)
    with open(temp_tar, 'rb') as f_in, open(output_zst, 'wb') as f_out:
        cctx.copy_stream(f_in, f_out)
    
    os.remove(temp_tar)

三、5GB+大文件的适配注意事项

  • 上述所有方案均支持流式处理,不会将整个文件加载到内存,完全可以处理5GB以上的文件夹。
  • 务必将压缩操作放到UI应用的后台线程(比如用threading或concurrent.futures),避免界面卡顿。
  • 放弃shutil.make_archive,它的内存占用和单线程设计不适合大文件处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:10:27