gzip — стиснення та розпакування gzip

Цей модуль дозволяє стискати та розпаковувати бінарні дані за допомогою алгоритму DEFLATE, що використовується форматом файлів gzip. Він надає допоміжні функції одноразового стиснення compress()/decompress() та потокову обгортку GzipFile навколо базового об’єкта файлу або потоку.

Примітка

Надавайте перевагу використанню deflate.DeflateIO замість функцій у цьому модулі, оскільки він надає потоковий інтерфейс для стиснення та розпакування, що є зручним та більш ефективним за пам’яттю при читанні або записі стиснених даних у файл, сокет або потік.

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

  • Цей модуль не включений до OpenMV Cam за замовчуванням, оскільки дублює функціональність, що вже надається модулем deflate.

  • Копію можна встановити (або заморозити у спеціальну мікропрограму) з micropython-lib (джерело). Дивіться Керування пакетами для додаткової інформації. Ця документація описує цей модуль.

  • Стиснення доступне лише якщо воно підтримується вбудованим модулем deflate — тобто недоступне на OpenMV Cams на базі 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.