有什么方法可以搜索 zlib 压缩的文本吗?
Any way to search zlib-compressed text?
对于一个项目,我必须存储大量文本,我希望通过 zlib 压缩文本来保持数据库较小。有没有一种方法可以在不解压缩的情况下通过测试子字符串来搜索 zlib 压缩的文本?
我想做如下事情:
>>> import zlib
>>> lorem = zlib.compress("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
>>> test_string = zlib.compress("Lorem")
>>> test_string in lorem
False
没有。您不能压缩一个短字符串并期望在包含该原始短字符串的文件的压缩版本中找到该压缩的结果。根据其前面的数据对数据进行不同的压缩编码。事实上,这就是大多数压缩器的工作方式——通过使用前面的数据来匹配字符串和统计分布。
要搜索字符串,您必须解压缩数据。不过,您不必存储解压缩的数据。您可以读入压缩数据并即时解压缩,在您找到您的字符串或到达结尾之前丢弃该数据。如果压缩数据非常大并且在慢速大众媒体上,这可能比在相同媒体上搜索未压缩的相同数据中的字符串更快。
对于一个项目,我必须存储大量文本,我希望通过 zlib 压缩文本来保持数据库较小。有没有一种方法可以在不解压缩的情况下通过测试子字符串来搜索 zlib 压缩的文本?
我想做如下事情:
>>> import zlib
>>> lorem = zlib.compress("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
>>> test_string = zlib.compress("Lorem")
>>> test_string in lorem
False
没有。您不能压缩一个短字符串并期望在包含该原始短字符串的文件的压缩版本中找到该压缩的结果。根据其前面的数据对数据进行不同的压缩编码。事实上,这就是大多数压缩器的工作方式——通过使用前面的数据来匹配字符串和统计分布。
要搜索字符串,您必须解压缩数据。不过,您不必存储解压缩的数据。您可以读入压缩数据并即时解压缩,在您找到您的字符串或到达结尾之前丢弃该数据。如果压缩数据非常大并且在慢速大众媒体上,这可能比在相同媒体上搜索未压缩的相同数据中的字符串更快。