0
我有一個串聯串的在名爲「行」列表產生的無效數據流和予壓縮它們如下:的Python BZ2順序壓縮機上低壓縮級別
import bz2
compressor = bz2.BZ2Compressor(compressionLevel)
for l in lines:
compressor.compress(l)
compressedData = compressor.flush()
decompressedData = bz2.decompress(compressedData)
當compressionLevel設定爲8或9 ,這工作正常。當它是介於1和7之間(包括1和7)的任何數字時,最後一行將失敗並顯示IOError:無效數據流。如果我使用順序解壓縮器,則會發生同樣的情況。但是,如果我加入了字符串連接爲一個長字符串,並使用一次性壓縮器功能,它工作正常:
import bz2
compressedData = bz2.compress("\n".join(lines))
decompressedData = bz2.decompress(compressedData)
# Works perfectly
你知道爲什麼會以及如何使其在較低的壓縮級別的工作?
啊,我明白了。我錯過了compress函數返回部分結果而不是flush()一次的事實。有趣的是,8或9的compressionLevel永遠不會達到部分結果已準備就緒 - 如果我正在測試另一組文檔,這種差異甚至可能不會顯示出來! – thornate