Сообщить об ошибке.

Функция decompress() модуля zlib в Python

Распаковать сжатые данные из буфера при помощи zlib

Синтаксис:

import zlib

zlib.decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

Параметры:

  • data - сжатые байты,
  • wbits=MAX_WBITS - управляет размером буфера, форматом заголовка и трейлера,
  • bufsize=DEF_BUF_SIZE - начальный размер выходного буфера.

Возвращаемое значение:

  • распакованные данные представленные в байтах.

Описание:

Функция decompress() модуля zlib распаковывает сжатые данные представленные как байты, возвращая объект байтов, содержащий несжатые данные.

Если задано значение аргумента bufsize, оно используется в качестве начального размера выходного буфера.

Вызывает исключение zlib.error, если возникает какая-либо ошибка.

Параметр wbits управляет размером буфера истории или "размером окна" и ожидаемым форматом заголовка и трейлера. Он похож на параметр для функции zlib.compressobj(), но принимает больше диапазонов значений:

  • от +8 до +15: логарифм основания-два размера окна. Входные данные должны включать заголовок zlib и трейлер.
  • 0: автоматически определять размер окна из заголовка zlib. Поддерживается только начиная с версии библиотеки zlib 1.2.3.5.
  • от -8 до -15: использует абсолютное значение wbits в качестве логарифма размера окна. Входными данными должен быть необработанный поток без заголовка или трейлера.
  • от +24 до +31 = 16 + (от 8 до 15): использует младшие 4 бита значения в качестве логарифма размера окна. Входные данные должны включать заголовок gzip и трейлер.
  • от +40 до +47 = 32 + (от 8 до 15): использует младшие 4 бита значения в качестве логарифма размера окна и автоматически принимает формат zlib или gzip.

При распаковке потока размер окна не должен быть меньше размера, первоначально использовавшегося для сжатия потока. Использование слишком маленького значения может привести к исключению zlib.error. Значение wbits по умолчанию соответствует наибольшему размеру окна и требует включения заголовка и трейлера библиотеки zlib.

Аргумент bufsize - это начальный размер буфера, используемого для хранения распакованных данных. Если требуется больше места, размер буфера будет увеличиваться по мере необходимости, поэтому вам не нужно точно определять это значение. Его настройка сохранит только несколько вызовов malloc().

Примеры использования:

>>> import zlib
# создадим массив данных
>>> text = 'Привет docs-python.ru '
>>> data = []
>>> for _ in range(10):
...     data.append(text * 20)
...
# преобразование текста в байты
>>> byte_data = '\n\n'.join(data).encode('utf-8')
# сжимаем данные
>>> compress = zlib.compress(byte_data, level=-1)
# распаковываем сжатые данные в буфер
>>> decompress = zlib.decompress(compress)
# преобразуем байты в текст
>>> text = decompress.decode('utf-8')
# выведем на печать первые 22 символа
>>> text[0:22]
# 'Привет docs-python.ru Привет'