Update: As @Mark Adler pointed out; partial content can be decompressed using zlib.decompressobj
:
>>> decompressor = zlib.decompressobj()
>>> decompressor.decompress(part)
"let's compress some t"
where part
is defined below.
--- Old comment follows:
By default zlib
doesn't handle partial content in Python.
This works:
>>> 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"
It doesn't work if we truncate it:
>>> 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
The same if we use zlib
explicitly:
>>> 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