gzip — сжатие и распаковка gzip

Этот модуль позволяет сжимать и распаковывать двоичные данные с помощью алгоритма DEFLATE, используемого форматом файлов gzip. Он предоставляет одноразовые вспомогательные функции compress()/decompress() и потоковую обёртку GzipFile вокруг нижележащего файла или потокового объекта.

Примечание

Предпочтительнее использовать deflate.DeflateIO вместо функций этого модуля, так как она предоставляет потоковый интерфейс к сжатию и распаковке, что удобно и более эффективно по памяти при чтении или записи сжатых данных в файл, сокет или поток.

Доступность:

  • Этот модуль не включён в OpenMV Cam по умолчанию, так как он дублирует функциональность, уже предоставляемую модулем deflate.

  • Копию можно установить (или вшить в пользовательскую прошивку) из micropython-lib (исходный код). Дополнительные сведения см. в Управление пакетами. Эта документация описывает указанный модуль.

  • Сжатие доступно только в том случае, если сжатие доступно во встроенном модуле deflate — то есть не на OpenMV Cam на базе STM32 (см. примечание о доступности выше).

Функции

gzip.open(filename: str, mode: str, /) GzipFile

Обёртка вокруг встроенной open(), возвращающая экземпляр GzipFile.

gzip.decompress(data: bytes, /) bytes

Распаковывает data в объект bytes.

gzip.compress(data: bytes, /) bytes

Сжимает data в объект bytes.

Классы

class gzip.GzipFile(*, fileobj, mode: str)

Этот класс можно использовать для обёртывания объекта fileobj, который является любым потокоподобным объектом, таким как файл, сокет или поток (включая io.BytesIO). Он сам является потоком и реализует стандартные методы read/readinto/write/close.

Когда аргумент mode равен "rb", чтение из экземпляра GzipFile распаковывает данные в нижележащем потоке и возвращает распакованные данные.

Если поддержка сжатия включена, то аргументу mode можно задать значение "wb", и записи в экземпляр GzipFile будут сжиматься и записываться в нижележащий поток.

По умолчанию класс GzipFile читает и записывает данные с использованием формата файлов gzip, включая заголовок и концевик с контрольной суммой и размером окна 512 байт.

Аргументы file, compresslevel и mtime не поддерживаются. Аргументы fileobj и mode всегда должны указываться как именованные аргументы.

Примеры

Типичный сценарий использования gzip.GzipFile — чтение или запись сжатого файла из хранилища:

import gzip

# Reading:
with open("data.gz", "rb") as f:
    with gzip.GzipFile(fileobj=f, mode="rb") as g:
        # Use g.read(), g.readinto(), etc.

 # Same, but using gzip.open:
with gzip.open("data.gz", "rb") as f:
     # Use f.read(), f.readinto(), etc.

# Writing:
with open("data.gz", "wb") as f:
    with gzip.GzipFile(fileobj=f, mode="wb") as g:
        # Use g.write(...) etc

# Same, but using gzip.open:
with gzip.open("data.gz", "wb") as f:
    # Use f.write(...) etc

# Write a dictionary as JSON in gzip format, with a
# small (64 byte) window size.
config = { ... }
with gzip.open("config.gz", "wb") as f:
    json.dump(config, f)

Рекомендации по работе с источниками gzip и выбору размера окна см. в примечании в конце документации по deflate.