Python Glossary English

все 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Сообщить о неточности