对于一个项目,我必须存储大量文本,我希望通过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
答案 0 :(得分:5)
没有。您不能压缩短字符串,并期望在包含该原始短字符串的文件的压缩版本中找到该压缩的结果。压缩根据前面的数据对数据进行不同的编码。实际上,这就是大多数压缩器的工作原理 - 通过使用前面的数据来匹配字符串和统计分布。
要搜索字符串,您必须解压缩数据。您不必存储解压缩的数据。您可以读取压缩数据并动态解压缩,随时丢弃该数据,直到找到您的字符串或结束。如果压缩数据非常大并且在慢速大众媒体上,这可能比在相同媒体上未压缩的相同数据中搜索字符串更快。