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

zlib.md

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

1> **Источник:** https://python-all.ru/3.2/library/zlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.1. [`zlib`](https://python-all.ru/3.2/library/zlib.html#module-zlib) – Сжатие, совместимое с **gzip**89Для приложений, которым требуется сжатие данных, функции этого модуля позволяют выполнять сжатие и распаковку с помощью библиотеки zlib. Библиотека zlib имеет собственную домашнюю страницу по адресу [http://www.zlib.net](https://python-all.ru/3.2/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.2/library/zlib.html).1213Для чтения и записи файлов `.gz` обратитесь к модулю [`gzip`](https://python-all.ru/3.2/library/gzip.html#module-gzip).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Сжимает байты в *data*, возвращая объект байтов, содержащий сжатые данные. *level* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, `9` – самый медленный и даёт наибольшее. `0` – без сжатия. Значение по умолчанию – `6`. Возбуждает исключение [`error`](https://python-all.ru/3.2/library/zlib.html#zlib.error) при возникновении ошибки.3435#### `zlib.compressobj([level])`3637Возвращает объект сжатия, предназначенный для сжатия потоков данных, которые не помещаются в память целиком. *level* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, `9` – самый медленный и даёт наибольшее. `0` – без сжатия. Значение по умолчанию – `6`.3839#### `zlib.crc32(data[, value])`4041Вычисляет контрольную сумму CRC (Cyclic Redundancy Check) для *data*. Если указан *value*, он используется как начальное значение контрольной суммы; в противном случае используется фиксированное значение по умолчанию. Это позволяет вычислять контрольную сумму на лету для объединения нескольких входных данных. Алгоритм не является криптостойким и не должен использоваться для аутентификации или цифровых подписей. Поскольку алгоритм спроектирован как алгоритм контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции.4243Всегда возвращает беззнаковое 32-битное целое число.4445> **Примечание**46>47> Чтобы получить одинаковое числовое значение во всех версиях Python и на всех платформах, используйте crc32(data) & 0xffffffff. Если контрольная сумма используется только в упакованном двоичном формате, это необязательно, так как возвращаемое значение уже является правильным 32-битным двоичным представлением независимо от знака.4849#### `zlib.decompress(data[, wbits[, bufsize]])`5051Распаковывает байты *data* и возвращает объект bytes, содержащий несжатые данные. Параметр *wbits* управляет размером буфера окна и подробно описан ниже. Если указан *bufsize*, он используется как начальный размер выходного буфера. При возникновении ошибки возбуждается исключение [`error`](https://python-all.ru/3.2/library/zlib.html#zlib.error).5253Абсолютное значение *wbits* – это двоичный логарифм размера буфера истории («размер окна»), используемого при сжатии данных. Для последних версий библиотеки zlib его абсолютное значение должно быть от 8 до 15: большие значения дают лучшее сжатие ценой большего расхода памяти. При распаковке потока *wbits* не должен быть меньше размера, использованного при сжатии; слишком маленькое значение приведёт к исключению. Поэтому значение по умолчанию – максимальное, 15. Когда *wbits* отрицательно, стандартный заголовок **gzip** подавляется.5455*bufsize* – начальный размер буфера для хранения распакованных данных. Если требуется больше места, размер буфера будет увеличен по мере необходимости, так что не обязательно подбирать это значение точно; его настройка лишь сэкономит несколько вызовов `malloc()`. Размер по умолчанию – 16384.5657#### `zlib.decompressobj([wbits])`5859Возвращает объект распаковки, предназначенный для распаковки потоков данных, которые не помещаются в память целиком. Параметр *wbits* управляет размером окна буфера.6061Объекты сжатия поддерживают следующие методы:6263#### `Compress.compress(data)`6465Сжимает *data* и возвращает объект bytes, содержащий сжатые данные для как минимум части данных из *data*. Эти данные следует добавить к результату, полученному от предыдущих вызовов метода [`compress()`](https://python-all.ru/3.2/library/zlib.html#zlib.compress). Некоторые входные данные могут сохраняться во внутренних буферах для последующей обработки.6667#### `Compress.flush([mode])`6869Обрабатываются все ожидающие входные данные и возвращается объект bytes, содержащий оставшийся сжатый вывод. *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.2/library/zlib.html#zlib.Compress.flush) с *mode*, установленным в `Z_FINISH`, метод [`compress()`](https://python-all.ru/3.2/library/zlib.html#zlib.compress) больше нельзя вызывать; единственное разумное действие – удалить объект.7071#### `Compress.copy()`7273Возвращает копию объекта сжатия. Это может быть использовано для эффективного сжатия набора данных, имеющих общий начальный префикс.7475Объекты распаковки поддерживают следующие методы и два атрибута:7677#### `Decompress.unused_data`7879Объект байтов, содержащий все байты после конца сжатых данных. То есть остаётся равным `""` до тех пор, пока не будет доступен последний байт, содержащий сжатые данные. Если вся строка байтов оказалась сжатыми данными, это будет `b""`, пустой объект байтов.8081Единственный способ определить, где заканчивается строка байтов со сжатыми данными, – это фактически распаковать её. Это означает, что если сжатые данные являются частью более крупного файла, можно найти её конец, только читая данные и подавая их в метод [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress) объекта распаковки, после чего подавать непустую строку байтов, пока атрибут [`unused_data`](https://python-all.ru/3.2/library/zlib.html#zlib.Decompress.unused_data) не перестанет быть пустым.8283#### `Decompress.unconsumed_tail`8485Объект bytes, содержащий любые данные, которые не были обработаны последним вызовом [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress), поскольку они превысили лимит буфера несжатых данных. Эти данные ещё не были обработаны механизмом zlib, поэтому их необходимо передать (возможно, с присоединёнными дополнительными данными) обратно в последующий вызов метода [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress), чтобы получить корректный вывод.8687#### `Decompress.decompress(data[, max_length])`8889Распаковывает *data*, возвращая объект bytes, содержащий несжатые данные, соответствующие по меньшей мере части данных из *string*. Эти данные следует добавить к выводу, полученному в результате всех предыдущих вызовов метода [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress). Часть входных данных может сохраняться во внутренних буферах для последующей обработки.9091Если указан необязательный параметр *max\_length*, то возвращаемое значение будет не длиннее *max\_length*. Это может означать, что не все сжатые входные данные удастся обработать; необработанные данные будут сохранены в атрибуте [`unconsumed_tail`](https://python-all.ru/3.2/library/zlib.html#zlib.Decompress.unconsumed_tail). Эта строка байтов должна быть передана последующему вызову [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress), если декомпрессию необходимо продолжить. Если *max\_length* не указан, то обрабатываются все входные данные целиком, и [`unconsumed_tail`](https://python-all.ru/3.2/library/zlib.html#zlib.Decompress.unconsumed_tail) пуст.9293#### `Decompress.flush([length])`9495Все ожидающие входные данные обрабатываются, и возвращается объект bytes, содержащий оставшиеся несжатые данные. После вызова [`flush()`](https://python-all.ru/3.2/library/zlib.html#zlib.Decompress.flush) метод [`decompress()`](https://python-all.ru/3.2/library/zlib.html#zlib.decompress) больше нельзя вызывать; единственное разумное действие – удалить объект.9697Необязательный параметр *length* задаёт начальный размер выходного буфера.9899#### `Decompress.copy()`100101Возвращает копию объекта распаковки. Это можно использовать для сохранения состояния распаковщика на середине потока данных, чтобы ускорить произвольный доступ к потоку в будущем.102103> **См. также**104>105> **Модуль [`gzip`](https://python-all.ru/3.2/library/gzip.html#module-gzip)**106>107> Чтение и запись файлов в формате108>109> **gzip**110>111> .112>113> **[http://www.zlib.net](https://python-all.ru/3.2/library/zlib.html)**114>115> Домашняя страница библиотеки zlib.116>117> **[http://www.zlib.net/manual.html](https://python-all.ru/3.2/library/zlib.html)**118>119> Руководство zlib объясняет семантику и использование многих функций библиотеки.120