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