1

我有一个大小约为500MB的巨大文本文件。我尝试从 python 程序和命令行使用Gzip将其存档。但是,在这两种情况下,归档文件的大小约为240MB,而在 Windows 中使用WinRAR归档时,归档文件的大小约为450KB。我在这里缺少什么吗?为什么有这么大的差异,我能做些什么来达到类似的压缩水平?

我也用 Python 标记了它,因为任何与此相关的 Python 代码都会非常有帮助。

这是文件的前 3 行:

$ head 100.txt -n 3
31731610:22783120;
22783120:
45476057:39683372;5879272;54702019;58780534;30705698;60087296;98422023;55173626;5607459;843581;11846946;97676518;46819398;60044103;48496022;35228829;6594795;43867901;66416757;81235384;42557439;40435884;60586505;65993069;76377254;82877796;94397118;39141041;2725176;56097923;4290013;26546278;18501064;27470542;60289066;43986553;67745714;16358528;63833235;92738288;77291467;54053846;93392935;10376621;15432256;96550938;25648200;10411060;3053129;54530514;97316324;
4

2 回答 2

6

该文件可能是高度冗余的,具有大于 32K 的重复模式。gzip 的 deflate 只查找 32K 的匹配项,而其他的可以利用更早的历史。

更新:

我刚刚制作了一个 64K 随机数据块的文件,重复了 4096 次(256 MB)。gzip(带有 32K 窗口)对冗余视而不见,因此无法对其进行压缩。gzip 将其扩展为 256.04 MB。xz(具有 8 MB 窗口的 LZMA)将其压缩为 102 KB。

于 2012-06-04T04:07:44.373 回答
1

WinRAR 和 Gzip 是两个非常不同的压缩程序。它们各自使用不同的算法来压缩数据。以下是来自维基百科的每种类型的描述:

RAR 第 3 版基于 Lempel-Ziv (LZSS) 和通过部分匹配 (PPM) 压缩进行预测,特别是 Dmitry Shkarin 的 PPMII 的 PPMd 实现。

http://en.wikipedia.org/wiki/RAR#Compression_algorithm

和 Gzip:

它基于 DEFLATE 算法,该算法是 Lempel-Ziv (LZ77) 和 Huffman 编码的组合。

en.wikipedia.org/wiki/Gzip

我的猜测是部分匹配预测和霍夫曼编码的工作方式之间存在某种差异。该文件具有非常有趣的属性...文件是什么?

于 2012-06-04T00:07:25.153 回答