希望这对某人有用。我测试了所有 zip 模式并在两个数据集上对它们进行了基准测试。第一个小(~30 MB)和其他大(~ 1,5 GB)。它们由各种类型的文件组成,因此尽可能接近现实生活场景。我对每个数据集进行了两种测试方法:“比例”一种和“完整”一种。两个测试一个接一个地重复 3 次以获得平均值。这些结果可能因您的机器而异,但我认为这仍然是一个不错的起点。
我用两种方法进行了测试,因为我正在尝试制作自己的专业备份解决方案。比例方法创建更多的 zip 文件,但它允许我在必要时传输更小的数据包,例如。只替换改变的东西。它比这更复杂,但现在并不重要。
完整的方法就是直接压缩整个文件夹。
压缩比计算:
size_difference = source_size -compressed_size
compression_ratio = (size_difference * 100.0) / source_size
基本上这个数字越高越好。
每个 zip 存档都像这样初始化:
# Mode tests
with zipfile.ZipFile(target_zip, 'w', compression_method) as ziph:
# Level tests
with zipfile.ZipFile(target_zip, 'w', compression_method, compresslevel=level) as ziph:
结果如下:
看来不管是什么方法,最优化的压缩方式是ZIP_DEFLATED。唯一较小的存档大小为我提供了 ZIP_LZMA 模式,但它只是 % 的一小部分,而且对于大型数据集,它需要大约 8 倍的时间。
此外,我尝试使用相同的数据集和方法进行不同级别的压缩。除了这一次,每个级别只有一次运行。
看起来 ZIP_DEFLATED 和 ZIP_BIP2 具有相似的压缩能力,但第二个要慢得多。对于大型数据集,1 或 2 的压缩级别就足够了。增加它对最终文件大小没有显着影响。如果工作负载需要大量“小” zip 文件,最好使用级别 9。它提供高压缩比,但所需时间与级别 1 大致相同。