更新:正如@Mark Adler指出的那样,可以使用zlib.decompressobj
解压部分内容:
>>> decompressor = zlib.decompressobj()
>>> decompressor.decompress(part)
"let's compress some t"
其中part
的定义如下。
--- 旧评论如下:
默认情况下,在Python中zlib
不处理部分内容。
以下是有效的:
>>> compressed = "let's compress some text".encode('zip')
>>> compressed
'x\x9c\xcbI-Q/VH\xce\xcf-(J-.V(\xce\xcfMU(I\xad(\x01\x00pX\t%'
>>> compressed.decode('zip')
"let's compress some text"
如果我们截断它,它就无法工作:
>>> part = compressed[:3*len(compressed)/4]
>>> part.decode('zip')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File ".../lib/python2.7/encodings/zlib_codec.py", lin
e 43, in zlib_decode
output = zlib.decompress(input)
error: Error -5 while decompressing data: incomplete or truncated stream
如果我们明确使用
zlib
,那么效果是一样的:
>>> import zlib
>>> zlib.decompress(compressed)
"let's compress some text"
>>> zlib.decompress(part)
Traceback (most recent call last):
File "<input>", line 1, in <module>
error: Error -5 while decompressing data: incomplete or truncated stream