Документация Python неофициальный перевод

zlib.md

248 строк · 16.6 КБ · обычная страница · сырой текст · скачать

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