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