Python Glossary English

все Python 3zlibфункция

zlib.compressobj()

сжатие

Создаёт объект потокового сжатия: данные подаются кусками через compress(), в конце обязателен flush().

Синтаксис

c = zlib.compressobj(level=-1, method=DEFLATED, wbits=15, memLevel=8, strategy=Z_DEFAULT_STRATEGY, zdict=None)

Нужен, когда данные не помещаются в память или приходят частями. Главная ловушка — забыть flush(): compress() возвращает лишь то, что накопилось, часто пустые b'', а хвост и контрольная сумма остаются внутри объекта — без flush() поток обрезан. После flush() объект использовать нельзя. Через wbits=31 тот же объект пишет формат gzip, через zdict — общий словарь для коротких похожих сообщений.

Примеры

import zlib
c = zlib.compressobj()
parts = [c.compress(chunk) for chunk in (b'abc' * 100, b'xyz' * 100)]
print(len(b''.join(parts)) < 10)  # → True — сжатое пока внутри объекта
try:
    zlib.decompress(b''.join(parts))
except zlib.error:
    print('без flush поток обрезан')  # → без flush поток обрезан
parts.append(c.flush())
print(len(zlib.decompress(b''.join(parts))))  # → 600

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности