2015-01-11 60 views
0

對於一個項目,我必須存儲大量文本,並且希望通過zlib壓縮文本來保持數據庫的小型化。有沒有辦法通過測試子字符串而無需解壓縮來搜索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 
+4

不,在一般情況下,解壓縮對於在壓縮文本中查找子字符串是不可或缺的。最好你可以做一個'decompressobj'來進行解壓和增量搜索,但是這樣做很難編程,因爲解壓縮部分的末尾可能與你正在尋找的**前綴**相匹配,並且你需要小心地跟蹤那... –

回答

5

號不能壓縮短字符串,並期望找到一個文件的壓縮版本,壓縮包含原始短結果串。壓縮根據其之前的數據對數據進行不同的編碼。事實上,這就是大多數壓縮機的工作原理 - 通過使用上述數據來匹配字符串和統計分佈。

要搜索字符串,您必須解壓縮數據。儘管如此,您不必存儲解壓縮的數據。您可以讀取壓縮數據並隨時解壓縮,隨時丟棄該數據,直到找到字符串或結束。如果壓縮數據非常大,並且在慢速大容量媒體上,這可能比在同一媒體上未壓縮的相同數據中搜索字符串更快。