zlib.compress

Функция zlib.compress позволяет сжимать байтовые данные с использованием алгоритма DEFLATE одним вызовом, возвращая сжатый байтовый объект. Это удобно для обработки небольших объёмов данных, которые можно полностью загрузить в память.

Синтаксис

zlib.compress(data, level=-1, wbits=zlib.MAX_WBITS)

Параметры:

  • data: байтовый объект, который необходимо сжать.
  • level: уровень сжатия — целое число от 0 до 9 или -1. - 0 (Z_NO_COMPRESSION): без сжатия. - 1 (Z_BEST_SPEED): максимальная скорость, минимальное сжатие. - 9 (Z_BEST_COMPRESSION): минимальная скорость, максимальное сжатие. - -1 (Z_DEFAULT_COMPRESSION): стандартный компромисс между скоростью и сжатием, обычно соответствует уровню 6.
  • wbits: управляет размером буфера истории (или "размером окна") и тем, будут ли включены заголовок и трейлер в выходные данные. Значение по умолчанию — 15 (zlib.MAX_WBITS).

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

Рассмотрим пример использования zlib.compress для сжатия строки.

import zlib

data = b"Hello, world! Hello, world! Hello, world!"
compressed_data = zlib.compress(data)
print(f"Compressed data: {compressed_data}")
print(f"Original length: {len(data)}, Compressed length: {len(compressed_data)}")

В этом примере строка "Hello, world!" сжимается с помощью функции zlib.compress. Выводятся сжатые данные и сравниваются длины оригинальных и сжатых данных.

Compressed data: b'x\x9c\xf3H\xcd\xc9\xc9\xd7Q(\xcf/\xcaIQT\xf0\xc0\xcd\x03\x00$\xe5\r\xdc'
Original length: 41, Compressed length: 25

Пример с различными уровнями сжатия

Можно указать уровень сжатия для контроля над балансом между скоростью и степенью сжатия.

import zlib

data = b"Hello, world! " * 1000

# Сжатие с разными уровнями
compressed_data_level_1 = zlib.compress(data, level=1)
compressed_data_level_9 = zlib.compress(data, level=9)

print(f"Compressed with level 1: {len(compressed_data_level_1)} bytes")
print(f"Compressed with level 9: {len(compressed_data_level_9)} bytes")

Этот пример показывает, как изменяется размер сжатых данных в зависимости от уровня сжатия.

Compressed with level 1: 120 bytes
Compressed with level 9: 68 bytes

Параметр wbits

Параметр wbits управляет размером буфера истории и форматом выходных данных. Значения могут варьироваться:

  • +9 до +15: Логарифм по основанию два размера окна, который, следовательно, варьируется от 512 до 32768. Большие значения обеспечивают лучшее сжатие за счет большего использования памяти. В результате выходные данные будут включать специфический для zlib заголовок и контрольную сумму.
  • −9 до −15: Использует абсолютное значение wbits как логарифм размера окна, при этом создавая необработанный выходной поток без заголовка и контрольной суммы
  • +25 до +31 = 16 + (9 до 15): Использует младшие 4 бита значения как логарифм размера окна, при этом включая основной заголовок gzip и контрольную сумму в выходные данные