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 и контрольную сумму в выходные данные