все Python 3zlibфункция
zlib.decompressobj()
сжатие
Создаёт объект потоковой распаковки: принимает сжатые данные кусками и знает, где кончился поток.
Синтаксис
d = zlib.decompressobj(wbits=15, zdict=b'')
Атрибут eof становится True, когда сжатый поток завершён, а всё, что пришло после него, лежит в unused_data — так разбирают несколько потоков подряд или поток с хвостом. Параметр max_length у decompress() ограничивает размер выдачи, а непереваренный остаток оставляет в unconsumed_tail: это защита от zip-бомбы, где мегабайт превращается в гигабайты.
Примеры
import zlib
packed = zlib.compress(b'abc' * 100)
d = zlib.decompressobj()
out = d.decompress(packed[:5])
print(d.eof) # → False
out += d.decompress(packed[5:] + b'TAIL')
print(len(out), d.eof, d.unused_data) # → 300 True b'TAIL'
import zlib
bomb = zlib.compress(b'\0' * 10_000_000)
d = zlib.decompressobj()
chunk = d.decompress(bomb, 1024)
print(len(bomb) < 20_000, len(chunk)) # → True 1024 — выдача ограничена
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности