> **Источник:** https://python-all.ru/3.0/library/zlib.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `zlib` – сжатие, совместимое с **gzip**

Для приложений, которым требуется сжатие данных, функции этого модуля позволяют выполнять сжатие и распаковку с помощью библиотеки zlib. Библиотека zlib имеет собственную домашнюю страницу по адресу [http://www.zlib.net](https://python-all.ru/3.0/library/zlib.html). Существуют известные несовместимости между модулем Python и версиями библиотеки zlib старше 1.1.3; в версии 1.1.3 есть уязвимость безопасности, поэтому рекомендуется использовать версию 1.1.4 или новее.

Функции zlib имеют множество опций и зачастую должны вызываться в определённом порядке. Данная документация не пытается охватить все комбинации; за авторитетной информацией обращайтесь к руководству zlib по адресу [http://www.zlib.net/manual.html](https://python-all.ru/3.0/library/zlib.html).

Для чтения и записи файлов `.gz` см. модуль [`gzip`](https://python-all.ru/3.0/library/gzip.html#module-gzip). Для других форматов архивов см. модули [`bz2`](https://python-all.ru/3.0/library/bz2.html#module-bz2), [`zipfile`](https://python-all.ru/3.0/library/zipfile.html#module-zipfile) и [`tarfile`](https://python-all.ru/3.0/library/tarfile.html#module-tarfile).

Доступные исключение и функции в этом модуле:

#### `[zlib.error]exception zlib.error`

Исключение, возникающее при ошибках сжатия и распаковки.

#### `[zlib.adler32]zlib.adler32(data[, value])`

Вычисляет контрольную сумму Адлера-32 для *data*. (Контрольная сумма Адлера-32 почти так же надёжна, как CRC32, но вычисляется гораздо быстрее.) Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять нарастающую контрольную сумму для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм предназначен для использования в качестве контрольной суммы, он не подходит для применения в качестве хеш-функции общего назначения.

Всегда возвращает беззнаковое 32-битное целое число.

> **Примечание**
>
> Чтобы получать одинаковое числовое значение во всех версиях Python и на всех платформах, используйте adler32(data) & 0xffffffff. Если вы используете контрольную сумму только в упакованном двоичном формате, это необязательно, поскольку возвращаемое значение является правильным 32-битным двоичным представлением независимо от знака.

Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.

#### `[zlib.compress]zlib.compress(string[, level])`

Сжимает данные из

*string*

и возвращает строку, содержащую сжатые данные.

*level*

– целое число от

`1`

до

`9`

, управляющее уровнем сжатия;

`1`

соответствует самому быстрому сжатию с наименьшей степенью сжатия,

`9`

– самому медленному с наибольшей степенью. Значение по умолчанию –

`6`

. В случае ошибки вызывает исключение

[`error`](https://python-all.ru/3.0/library/zlib.html#zlib.error)

.

#### `[zlib.compressobj]zlib.compressobj([level])`

Возвращает объект сжатия, предназначенный для сжатия потоков данных, которые не помещаются в память целиком.

*level*

– целое число от

`1`

до

`9`

, управляющее степенью сжатия;

`1`

– самый быстрый и даёт наименьшее сжатие,

`9`

– самый медленный и даёт наибольшее. Значение по умолчанию –

`6`

.

#### `[zlib.crc32]zlib.crc32(data[, value])`

Вычисляет контрольную сумму CRC (Cyclic Redundancy Check) для *data*. Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять контрольную сумму на лету для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм спроектирован как алгоритм контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции.

Всегда возвращает беззнаковое 32-битное целое число.

> **Примечание**
>
> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.

Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.

#### `[zlib.decompress]zlib.decompress(string[, wbits[, bufsize]])`

Распаковывает данные из *string* и возвращает строку, содержащую несжатые данные. Параметр *wbits* управляет размером буфера окна. Если указан *bufsize*, он используется как начальный размер выходного буфера. В случае ошибки вызывает исключение [`error`](https://python-all.ru/3.0/library/zlib.html#zlib.error).

Абсолютное значение *wbits* – это двоичный логарифм размера буфера истории (размера окна), используемого при сжатии данных. Его абсолютное значение должно быть от 8 до 15 в последних версиях библиотеки zlib: большие значения дают лучшее сжатие ценой большего расхода памяти. Значение по умолчанию – 15. Если *wbits* отрицательно, стандартный заголовок **gzip** подавляется; это недокументированная особенность библиотеки zlib, используемая для совместимости с форматом сжатия **unzip**.

*bufsize* – начальный размер буфера для хранения распакованных данных. Если требуется больше места, размер буфера будет увеличен по мере необходимости, поэтому не нужно подбирать это значение точно; его настройка лишь позволит сэкономить несколько вызовов `malloc`. Размер по умолчанию – 16384.

#### `[zlib.decompressobj]zlib.decompressobj([wbits])`

Возвращает объект распаковки, предназначенный для распаковки потоков данных, которые не помещаются в память целиком. Параметр

*wbits*

управляет размером окна буфера.

Объекты сжатия поддерживают следующие методы:

#### `[zlib.Compress.compress]Compress.compress(string)`

Сжимает

*string*

и возвращает строку, содержащую сжатые данные хотя бы для части данных из

*string*

. Эти данные следует добавить к выводу, полученному в результате любых предыдущих вызовов метода

[`compress()`](https://python-all.ru/3.0/library/zlib.html#zlib.compress)

. Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.

#### `[zlib.Compress.flush]Compress.flush([mode])`

Обрабатываются все ожидающие входные данные, и возвращается строка с оставшимся сжатым выводом.

*mode*

можно выбрать из констант

`Z_SYNC_FLUSH`

,

`Z_FULL_FLUSH`

или

`Z_FINISH`

, по умолчанию

`Z_FINISH`

.

`Z_SYNC_FLUSH`

и

`Z_FULL_FLUSH`

позволяют сжимать последующие строки данных, тогда как

`Z_FINISH`

завершает сжатый поток и предотвращает дальнейшее сжатие. После вызова

[`flush()`](https://python-all.ru/3.0/library/zlib.html#zlib.Compress.flush)

с

*mode*

, установленным в

`Z_FINISH`

, метод

[`compress()`](https://python-all.ru/3.0/library/zlib.html#zlib.compress)

больше нельзя вызывать; единственное разумное действие – удалить объект.

#### `[zlib.Compress.copy]Compress.copy()`

Возвращает копию объекта сжатия. Это может быть использовано для эффективного сжатия набора данных, имеющих общий начальный префикс.

Объекты распаковки поддерживают следующие методы и два атрибута:

#### `[zlib.Decompress.unused_data]Decompress.unused_data`

Строка, содержащая все байты, находящиеся за концом сжатых данных. То есть это значение равно `""`, пока не станет доступен последний байт, содержащий данные сжатия. Если вся строка оказалась содержащей сжатые данные, это `""`, пустая строка.

Единственный способ определить, где заканчивается строка сжатых данных, – фактически распаковать её. Это означает, что когда сжатые данные содержатся в составе большего файла, найти их конец можно только читая данные и передавая их (с последующей непустой строкой) методу [`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress) объекта распаковки до тех пор, пока атрибут [`unused_data`](https://python-all.ru/3.0/library/zlib.html#zlib.Decompress.unused_data) не перестанет быть пустой строкой.

#### `[zlib.Decompress.unconsumed_tail]Decompress.unconsumed_tail`

Строка, содержащая данные, которые не были обработаны последним вызовом

[`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress)

, поскольку они превысили лимит буфера несжатых данных. Эти данные ещё не были просмотрены механизмом zlib, поэтому их необходимо передать (возможно, с добавлением дополнительных данных) обратно в последующий вызов метода

[`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress)

для получения корректного вывода.

#### `[zlib.Decompress.decompress]Decompress.decompress(string[, max_length])`

Распаковывает *string* и возвращает строку, содержащую несжатые данные, соответствующие хотя бы части данных из *string*. Эти данные следует добавить к выводу, полученному в результате любых предыдущих вызовов метода [`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress). Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.

Если указан необязательный параметр *max\_length*, возвращаемое значение будет не длиннее *max\_length*. Это может означать, что не все сжатые входные данные могут быть обработаны; необработанные данные будут сохранены в атрибуте [`unconsumed_tail`](https://python-all.ru/3.0/library/zlib.html#zlib.Decompress.unconsumed_tail). Эту строку необходимо передать в последующий вызов [`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress), если распаковка должна продолжаться. Если *max\_length* не указан, то распаковываются все входные данные, и [`unconsumed_tail`](https://python-all.ru/3.0/library/zlib.html#zlib.Decompress.unconsumed_tail) является пустой строкой.

#### `[zlib.Decompress.flush]Decompress.flush([length])`

Обрабатываются все ожидающие входные данные, и возвращается строка с оставшимся несжатым выводом. После вызова [`flush()`](https://python-all.ru/3.0/library/zlib.html#zlib.Decompress.flush) метод [`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress) больше нельзя вызывать; единственное разумное действие – удалить объект.

Необязательный параметр *length* задаёт начальный размер выходного буфера.

#### `[zlib.Decompress.copy]Decompress.copy()`

Возвращает копию объекта распаковки. Это можно использовать для сохранения состояния распаковщика на середине потока данных, чтобы ускорить произвольный доступ к потоку в будущем.

> **См. также**
>
> **Модуль [`gzip`](https://python-all.ru/3.0/library/gzip.html#module-gzip)**
>
> Чтение и запись файлов в формате
>
> **gzip**
>
> .
>
> **[http://www.zlib.net](https://python-all.ru/3.0/library/zlib.html)**
>
> Домашняя страница библиотеки zlib.
>
> **[http://www.zlib.net/manual.html](https://python-all.ru/3.0/library/zlib.html)**
>
> Руководство zlib объясняет семантику и использование многих функций библиотеки.
