【问题标题】:Python compression of many objects with a single compression table使用单个压缩表对多个对象进行 Python 压缩
【发布时间】:2015-09-14 16:30:34
【问题描述】:

考虑许多(数十或数百万)相当短(大约 100 个 ascii 字符)的字符串,其中包含许多重复的子字符串。我想在 Python 程序中使用字符串,但要压缩它们以节省空间。 大多数压缩算法,如 Lempel-Ziv (LZ),使用查找表对压缩数据进行编码。 有没有办法使用现有的压缩库(如zlibzlib 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


【解决方案1】:

它不像你说的那样工作,但有一种方法可以做我认为你所要求的。 zlib 有一个函数 deflateSetDictionary(),您可以使用它来为压缩器启动 32K 数据,希望这些数据代表您尝试压缩的短字符串。您可以使用示例字符串和/或示例字符串的一部分来构建它。

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2017-08-11
    相关资源
    最近更新 更多