zlib.md
1> **Источник:** https://python-all.ru/3.0/library/zlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `zlib` – сжатие, совместимое с **gzip**89Для приложений, которым требуется сжатие данных, функции этого модуля позволяют выполнять сжатие и распаковку с помощью библиотеки 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 или новее.1011Функции zlib имеют множество опций и зачастую должны вызываться в определённом порядке. Данная документация не пытается охватить все комбинации; за авторитетной информацией обращайтесь к руководству zlib по адресу [http://www.zlib.net/manual.html](https://python-all.ru/3.0/library/zlib.html).1213Для чтения и записи файлов `.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).1415Доступные исключение и функции в этом модуле:1617#### `[zlib.error]exception zlib.error`1819Исключение, возникающее при ошибках сжатия и распаковки.2021#### `[zlib.adler32]zlib.adler32(data[, value])`2223Вычисляет контрольную сумму Адлера-32 для *data*. (Контрольная сумма Адлера-32 почти так же надёжна, как CRC32, но вычисляется гораздо быстрее.) Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять нарастающую контрольную сумму для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм предназначен для использования в качестве контрольной суммы, он не подходит для применения в качестве хеш-функции общего назначения.2425Всегда возвращает беззнаковое 32-битное целое число.2627> **Примечание**28>29> Чтобы получать одинаковое числовое значение во всех версиях Python и на всех платформах, используйте adler32(data) & 0xffffffff. Если вы используете контрольную сумму только в упакованном двоичном формате, это необязательно, поскольку возвращаемое значение является правильным 32-битным двоичным представлением независимо от знака.3031Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.3233#### `[zlib.compress]zlib.compress(string[, level])`3435Сжимает данные из3637*string*3839и возвращает строку, содержащую сжатые данные.4041*level*4243– целое число от4445`1`4647до4849`9`5051, управляющее уровнем сжатия;5253`1`5455соответствует самому быстрому сжатию с наименьшей степенью сжатия,5657`9`5859– самому медленному с наибольшей степенью. Значение по умолчанию –6061`6`6263. В случае ошибки вызывает исключение6465[`error`](https://python-all.ru/3.0/library/zlib.html#zlib.error)6667.6869#### `[zlib.compressobj]zlib.compressobj([level])`7071Возвращает объект сжатия, предназначенный для сжатия потоков данных, которые не помещаются в память целиком.7273*level*7475– целое число от7677`1`7879до8081`9`8283, управляющее степенью сжатия;8485`1`8687– самый быстрый и даёт наименьшее сжатие,8889`9`9091– самый медленный и даёт наибольшее. Значение по умолчанию –9293`6`9495.9697#### `[zlib.crc32]zlib.crc32(data[, value])`9899Вычисляет контрольную сумму CRC (Cyclic Redundancy Check) для *data*. Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять контрольную сумму на лету для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм спроектирован как алгоритм контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции.100101Всегда возвращает беззнаковое 32-битное целое число.102103> **Примечание**104>105> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.106107Изменено в версии 3.0: Возвращаемое значение беззнаковое и находится в диапазоне \[0, 2\*\*32-1\] независимо от платформы.108109#### `[zlib.decompress]zlib.decompress(string[, wbits[, bufsize]])`110111Распаковывает данные из *string* и возвращает строку, содержащую несжатые данные. Параметр *wbits* управляет размером буфера окна. Если указан *bufsize*, он используется как начальный размер выходного буфера. В случае ошибки вызывает исключение [`error`](https://python-all.ru/3.0/library/zlib.html#zlib.error).112113Абсолютное значение *wbits* – это двоичный логарифм размера буфера истории (размера окна), используемого при сжатии данных. Его абсолютное значение должно быть от 8 до 15 в последних версиях библиотеки zlib: большие значения дают лучшее сжатие ценой большего расхода памяти. Значение по умолчанию – 15. Если *wbits* отрицательно, стандартный заголовок **gzip** подавляется; это недокументированная особенность библиотеки zlib, используемая для совместимости с форматом сжатия **unzip**.114115*bufsize* – начальный размер буфера для хранения распакованных данных. Если требуется больше места, размер буфера будет увеличен по мере необходимости, поэтому не нужно подбирать это значение точно; его настройка лишь позволит сэкономить несколько вызовов `malloc`. Размер по умолчанию – 16384.116117#### `[zlib.decompressobj]zlib.decompressobj([wbits])`118119Возвращает объект распаковки, предназначенный для распаковки потоков данных, которые не помещаются в память целиком. Параметр120121*wbits*122123управляет размером окна буфера.124125Объекты сжатия поддерживают следующие методы:126127#### `[zlib.Compress.compress]Compress.compress(string)`128129Сжимает130131*string*132133и возвращает строку, содержащую сжатые данные хотя бы для части данных из134135*string*136137. Эти данные следует добавить к выводу, полученному в результате любых предыдущих вызовов метода138139[`compress()`](https://python-all.ru/3.0/library/zlib.html#zlib.compress)140141. Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.142143#### `[zlib.Compress.flush]Compress.flush([mode])`144145Обрабатываются все ожидающие входные данные, и возвращается строка с оставшимся сжатым выводом.146147*mode*148149можно выбрать из констант150151`Z_SYNC_FLUSH`152153,154155`Z_FULL_FLUSH`156157или158159`Z_FINISH`160161, по умолчанию162163`Z_FINISH`164165.166167`Z_SYNC_FLUSH`168169и170171`Z_FULL_FLUSH`172173позволяют сжимать последующие строки данных, тогда как174175`Z_FINISH`176177завершает сжатый поток и предотвращает дальнейшее сжатие. После вызова178179[`flush()`](https://python-all.ru/3.0/library/zlib.html#zlib.Compress.flush)180181с182183*mode*184185, установленным в186187`Z_FINISH`188189, метод190191[`compress()`](https://python-all.ru/3.0/library/zlib.html#zlib.compress)192193больше нельзя вызывать; единственное разумное действие – удалить объект.194195#### `[zlib.Compress.copy]Compress.copy()`196197Возвращает копию объекта сжатия. Это может быть использовано для эффективного сжатия набора данных, имеющих общий начальный префикс.198199Объекты распаковки поддерживают следующие методы и два атрибута:200201#### `[zlib.Decompress.unused_data]Decompress.unused_data`202203Строка, содержащая все байты, находящиеся за концом сжатых данных. То есть это значение равно `""`, пока не станет доступен последний байт, содержащий данные сжатия. Если вся строка оказалась содержащей сжатые данные, это `""`, пустая строка.204205Единственный способ определить, где заканчивается строка сжатых данных, – фактически распаковать её. Это означает, что когда сжатые данные содержатся в составе большего файла, найти их конец можно только читая данные и передавая их (с последующей непустой строкой) методу [`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) не перестанет быть пустой строкой.206207#### `[zlib.Decompress.unconsumed_tail]Decompress.unconsumed_tail`208209Строка, содержащая данные, которые не были обработаны последним вызовом210211[`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress)212213, поскольку они превысили лимит буфера несжатых данных. Эти данные ещё не были просмотрены механизмом zlib, поэтому их необходимо передать (возможно, с добавлением дополнительных данных) обратно в последующий вызов метода214215[`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress)216217для получения корректного вывода.218219#### `[zlib.Decompress.decompress]Decompress.decompress(string[, max_length])`220221Распаковывает *string* и возвращает строку, содержащую несжатые данные, соответствующие хотя бы части данных из *string*. Эти данные следует добавить к выводу, полученному в результате любых предыдущих вызовов метода [`decompress()`](https://python-all.ru/3.0/library/zlib.html#zlib.decompress). Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.222223Если указан необязательный параметр *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) является пустой строкой.224225#### `[zlib.Decompress.flush]Decompress.flush([length])`226227Обрабатываются все ожидающие входные данные, и возвращается строка с оставшимся несжатым выводом. После вызова [`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) больше нельзя вызывать; единственное разумное действие – удалить объект.228229Необязательный параметр *length* задаёт начальный размер выходного буфера.230231#### `[zlib.Decompress.copy]Decompress.copy()`232233Возвращает копию объекта распаковки. Это можно использовать для сохранения состояния распаковщика на середине потока данных, чтобы ускорить произвольный доступ к потоку в будущем.234235> **См. также**236>237> **Модуль [`gzip`](https://python-all.ru/3.0/library/gzip.html#module-gzip)**238>239> Чтение и запись файлов в формате240>241> **gzip**242>243> .244>245> **[http://www.zlib.net](https://python-all.ru/3.0/library/zlib.html)**246>247> Домашняя страница библиотеки zlib.248>249> **[http://www.zlib.net/manual.html](https://python-all.ru/3.0/library/zlib.html)**250>251> Руководство zlib объясняет семантику и использование многих функций библиотеки.252