【发布时间】:2015-09-14 16:30:34
【问题描述】:
考虑许多(数十或数百万)相当短(大约 100 个 ascii 字符)的字符串,其中包含许多重复的子字符串。我想在 Python 程序中使用字符串,但要压缩它们以节省空间。 大多数压缩算法,如 Lempel-Ziv (LZ),使用查找表对压缩数据进行编码。 有没有办法使用现有的压缩库(如zlib、zlib module)来做到这一点?在伪代码中,为了压缩数据,需要调用
table = zlib.makeTable( data )
foreach string:
compressedString = zlib.compressString( table, string )
然后存储压缩后的字符串。
【问题讨论】:
-
我不确定您对大多数压缩算法如何工作的假设是否正确......当然有些确实......但是它通常不是任意的,它发生在幕后(不像你的例子那样明确)
-
有趣的问题。从 zlib(C 库,而不是 Python 模块)zlib.net/manual.html 的文档中,我看到有一个函数
deflateSetDictionary()与您的makeTable示例大致相同。对于解压,您可以使用inflateSetDictionary()。在确定压缩表后,您将使用deflate()和inflate()进行实际的压缩和解压缩。现在,这些是 C 库中的函数,因此需要从 Python 调用它们,但这已经是一个已解决的问题。
标签: python compression zlib