zlib.md
1> **Источник:** https://python-all.ru/2.7/library/zlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.1. [`zlib`](https://python-all.ru/2.7/library/zlib.html#module-zlib) – Сжатие, совместимое с **gzip**89Для приложений, которым требуется сжатие данных, функции этого модуля позволяют выполнять сжатие и распаковку с помощью библиотеки zlib. Библиотека zlib имеет собственную домашнюю страницу по адресу [http://www.zlib.net](https://python-all.ru/2.7/library/zlib.html). Существуют известные несовместимости между модулем Python и версиями библиотеки zlib старше 1.1.3; в версии 1.1.3 есть уязвимость безопасности, поэтому рекомендуется использовать версию 1.1.4 или новее.1011Функции zlib имеют множество опций и зачастую должны вызываться в определённом порядке. Данная документация не пытается охватить все комбинации; за авторитетной информацией обращайтесь к руководству zlib по адресу [http://www.zlib.net/manual.html](https://python-all.ru/2.7/library/zlib.html).1213Для чтения и записи файлов `.gz` обратитесь к модулю [`gzip`](https://python-all.ru/2.7/library/gzip.html#module-gzip).1415Доступные исключение и функции в этом модуле:1617#### `exception zlib.error`1819Исключение, возникающее при ошибках сжатия и распаковки.2021#### `zlib.adler32(data[, value])`2223Вычисляет контрольную сумму Adler-32 для *data*. (Контрольная сумма Adler-32 почти так же надёжна, как CRC32, но вычисляется гораздо быстрее.) Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять контрольную сумму на лету для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм спроектирован как алгоритм контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции.2425Эта функция всегда возвращает целое число.2627> **Примечание**28>29> Чтобы получать одинаковое числовое значение во всех версиях Python и на всех платформах, используйте adler32(data) & 0xffffffff. Если вы используете контрольную сумму только в упакованном двоичном формате, это необязательно, поскольку возвращаемое значение является правильным 32-битным двоичным представлением независимо от знака.3031Изменено в версии 2.6: Возвращаемое значение лежит в диапазоне \[-2\*\*31, 2\*\*31-1\] независимо от платформы. В старых версиях значение было знаковым на одних платформах и беззнаковым на других.3233Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.3435#### `zlib.compress(string[, level])`3637Сжимает данные в *string*, возвращая строку, содержащую сжатые данные. *level* – целое число от `0` до `9`, управляющее степенью сжатия; `1` – самый быстрый и даёт наименьшее сжатие, `9` – самый медленный и даёт наибольшее. `0` – без сжатия. Значение по умолчанию – `6`. Возбуждает исключение [`error`](https://python-all.ru/2.7/library/zlib.html#zlib.error) в случае ошибки.3839#### `zlib.compressobj([level[, method[, wbits[, memlevel[, strategy]]]]])`4041Возвращает объект сжатия, который используется для сжатия потоков данных, не помещающихся в память целиком. *level* – целое число от `0` до `9` или `-1`, управляющее степенью сжатия; `1` – самый быстрый и даёт наименьшее сжатие, `9` – самый медленный и даёт наибольшее. `0` – без сжатия. Значение по умолчанию – `-1` (Z\_DEFAULT\_COMPRESSION). Z\_DEFAULT\_COMPRESSION представляет собой компромисс между скоростью и сжатием (в настоящее время эквивалентен уровню 6).4243*method* – алгоритм сжатия. В настоящее время поддерживается только значение `DEFLATED`.4445Аргумент *wbits* управляет размером буфера истории (или «размером окна»), используемого при сжатии данных, а также тем, включаются ли заголовок и концевик в выходные данные. Он может принимать несколько диапазонов значений. По умолчанию – 15.4647- +9 … +15: двоичный логарифм размера окна, который соответственно находится в диапазоне от 512 до 32768. Большие значения дают лучшее сжатие за счёт большего расхода памяти. Полученный выходной поток будет включать заголовок и концевик, специфичные для zlib.48- −9 … −15: использует абсолютное значение *wbits* как логарифм размера окна, при этом создаётся необработанный выходной поток без заголовка и концевой контрольной суммы.49- +25 … +31 = 16 + (9 … 15): использует младшие 4 бита значения как логарифм размера окна, при этом в выходные данные включается простой заголовок **gzip** и концевая контрольная сумма.5051*memlevel* управляет объёмом памяти, используемой для внутреннего состояния сжатия. Допустимые значения – от `1` до `9`. Большие значения используют больше памяти, но работают быстрее и дают меньший выходной размер. По умолчанию – 8.5253*strategy* используется для настройки алгоритма сжатия. Возможные значения: `Z_DEFAULT_STRATEGY`, `Z_FILTERED` и `Z_HUFFMAN_ONLY`. По умолчанию – `Z_DEFAULT_STRATEGY`.5455#### `zlib.crc32(data[, value])`5657Вычисляет контрольную сумму CRC (Cyclic Redundancy Check) для *data*. Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять контрольную сумму на лету для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм спроектирован как алгоритм контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции.5859Эта функция всегда возвращает целое число.6061> **Примечание**62>63> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.6465Изменено в версии 2.6: Возвращаемое значение лежит в диапазоне \[-2\*\*31, 2\*\*31-1\] независимо от платформы. В старых версиях значение было знаковым на одних платформах и беззнаковым на других.6667Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.6869#### `zlib.decompress(string[, wbits[, bufsize]])`7071Распаковывает данные в *string*, возвращая строку, содержащую несжатые данные. Параметр *wbits* зависит от формата *string* и подробно описан ниже. Если задан *bufsize*, он используется как начальный размер выходного буфера. Возбуждает исключение [`error`](https://python-all.ru/2.7/library/zlib.html#zlib.error) в случае ошибки.7273Параметр *wbits* управляет размером буфера истории (или «размером окна»), а также тем, какой формат заголовка и трейлера ожидается. Он аналогичен параметру для [`compressobj()`](https://python-all.ru/2.7/library/zlib.html#zlib.compressobj), но принимает больше диапазонов значений:7475- +8 … +15: двоичный логарифм размера окна. Входные данные должны содержать заголовок и трейлер zlib.76- 0: автоматически определять размер окна из заголовка zlib. Поддерживается только начиная с zlib 1.2.3.5.77- −8 … −15: использует абсолютное значение *wbits* как логарифм размера окна. Входные данные должны быть сырым потоком без заголовка или трейлера.78- +24 … +31 = 16 + (8 … 15): использует младшие 4 бита значения как логарифм размера окна. Входные данные должны содержать заголовок и трейлер gzip.79- +40 … +47 = 32 + (8 … 15): использует младшие 4 бита значения как логарифм размера окна и автоматически принимает как формат zlib, так и gzip.8081При декомпрессии потока размер окна не должен быть меньше размера, использованного при сжатии потока; слишком маленькое значение может привести к исключению [`error`](https://python-all.ru/2.7/library/zlib.html#zlib.error). Значение *wbits* по умолчанию равно 15, что соответствует наибольшему размеру окна и требует включения заголовка и концевика zlib.8283*bufsize* – начальный размер буфера для хранения распакованных данных. Если требуется больше места, размер буфера будет увеличен по мере необходимости, так что не нужно точно подбирать это значение; его настройка лишь сэкономит несколько вызовов `malloc()`. Размер по умолчанию – 16384.8485#### `zlib.decompressobj([wbits])`8687Возвращает объект распаковки, предназначенный для распаковки потоков данных, которые не помещаются в память целиком.8889Параметр *wbits* управляет размером буфера истории (или «размером окна») и тем, какой формат заголовка и трейлера ожидается. Он имеет то же значение, что и [описанный для decompress()](https://python-all.ru/2.7/library/zlib.html#decompress-wbits).9091Объекты сжатия поддерживают следующие методы:9293#### `Compress.compress(string)`9495Сжимает *string*, возвращая строку, содержащую сжатые данные по крайней мере для части данных в *string*. Эти данные должны быть присоединены к выходным данным, полученным в результате любых предыдущих вызовов метода [`compress()`](https://python-all.ru/2.7/library/zlib.html#zlib.compress). Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.9697#### `Compress.flush([mode])`9899Все ожидающие входные данные обрабатываются, и возвращается строка, содержащая оставшийся сжатый вывод. *mode* может быть выбран из констант `Z_SYNC_FLUSH`, `Z_FULL_FLUSH` или `Z_FINISH`, по умолчанию `Z_FINISH`. `Z_SYNC_FLUSH` и `Z_FULL_FLUSH` позволяют продолжить сжатие дальнейших строк данных, тогда как `Z_FINISH` завершает сжатый поток и не позволяет сжимать больше данных. После вызова [`flush()`](https://python-all.ru/2.7/library/zlib.html#zlib.Compress.flush) с *mode*, установленным в `Z_FINISH`, метод [`compress()`](https://python-all.ru/2.7/library/zlib.html#zlib.compress) больше нельзя вызывать; единственное разумное действие – удалить объект.100101#### `Compress.copy()`102103Возвращает копию объекта сжатия. Это может быть использовано для эффективного сжатия набора данных, имеющих общий начальный префикс.104105Новое в версии 2.5.106107Объекты распаковки поддерживают следующие методы и два атрибута:108109#### `Decompress.unused_data`110111Строка, содержащая все байты, находящиеся за концом сжатых данных. То есть это значение равно `""`, пока не станет доступен последний байт, содержащий данные сжатия. Если вся строка оказалась содержащей сжатые данные, это `""`, пустая строка.112113Единственный способ определить, где заканчивается строка сжатых данных, – это фактически распаковать её. Это означает, что если сжатые данные являются частью более крупного файла, найти их конец можно только читая данные и передавая их вместе с какой-нибудь непустой строкой в метод [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress) объекта распаковки до тех пор, пока атрибут [`unused_data`](https://python-all.ru/2.7/library/zlib.html#zlib.Decompress.unused_data) не перестанет быть пустой строкой.114115#### `Decompress.unconsumed_tail`116117Строка, содержащая данные, которые не были обработаны последним вызовом [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress), поскольку превысили лимит буфера несжатых данных. Эти данные ещё не были обработаны механизмом zlib, поэтому их необходимо снова передать (возможно, с добавленными к ним дополнительными данными) последующему вызову метода [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress), чтобы получить корректный вывод.118119#### `Decompress.decompress(string[, max_length])`120121Распаковывает *string*, возвращая строку, содержащую несжатые данные, соответствующие по крайней мере части данных в *string*. Эти данные должны быть присоединены к выходным данным, полученным в результате любых предыдущих вызовов метода [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress). Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.122123Если необязательный параметр *max\_length* не равен нулю, то возвращаемое значение будет не длиннее *max\_length*. Это может означать, что не все сжатые входные данные могут быть обработаны; необработанные данные будут сохранены в атрибуте [`unconsumed_tail`](https://python-all.ru/2.7/library/zlib.html#zlib.Decompress.unconsumed_tail). Эта строка должна быть передана последующему вызову [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress), если распаковка должна быть продолжена. Если *max\_length* не указан, то распаковываются все входные данные, и [`unconsumed_tail`](https://python-all.ru/2.7/library/zlib.html#zlib.Decompress.unconsumed_tail) является пустой строкой.124125#### `Decompress.flush([length])`126127Все ожидающие входные данные обрабатываются, и возвращается строка, содержащая оставшийся несжатый вывод. После вызова [`flush()`](https://python-all.ru/2.7/library/zlib.html#zlib.Decompress.flush) метод [`decompress()`](https://python-all.ru/2.7/library/zlib.html#zlib.decompress) больше нельзя вызывать; единственное разумное действие – удалить объект.128129Необязательный параметр *length* задаёт начальный размер выходного буфера.130131#### `Decompress.copy()`132133Возвращает копию объекта распаковки. Это можно использовать для сохранения состояния распаковщика на середине потока данных, чтобы ускорить произвольный доступ к потоку в будущем.134135Новое в версии 2.5.136137> **См. также**138>139> **Модуль [`gzip`](https://python-all.ru/2.7/library/gzip.html#module-gzip)**140>141> Чтение и запись файлов в формате **gzip**.142>143> **[http://www.zlib.net](https://python-all.ru/2.7/library/zlib.html)**144>145> Домашняя страница библиотеки zlib.146>147> **[http://www.zlib.net/manual.html](https://python-all.ru/2.7/library/zlib.html)**148>149> Руководство zlib объясняет семантику и использование многих функций библиотеки.150