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

12.2. gzip – Поддержка gzip-файловgzip – Support for gzip files

Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU gzip и gunzip.

Сжатие данных обеспечивается модулем zlib.

Модуль gzip предоставляет класс GzipFile. Класс GzipFile читает и записывает файлы в формате gzip, автоматически сжимая или распаковывая данные так, что они выглядят как обычный файловый объект.

Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами gzip и gunzip, например, созданные программами compress и pack, не поддерживаются этим модулем.

О других форматах архивов см. модули bz2, zipfile и tarfile.

Модуль определяет следующие элементы:

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

Конструктор класса GzipFile, который имитирует большинство методов файлового объекта, за исключением методов readinto() и truncate(). По крайней мере один из fileobj и filename должен получить непустое значение.

Новый экземпляр класса основан на fileobj, который может быть обычным файлом, объектом StringIO или любым другим объектом, имитирующим файл. По умолчанию он равен None, и в этом случае filename открывается для предоставления файлового объекта.

Если fileobj не равен None, аргумент filename используется только для включения в заголовок файла gzip, который может содержать исходное имя несжатого файла. По умолчанию он равен имени файла fileobj, если оно определимо; в противном случае он равен пустой строке, и в этом случае исходное имя файла не включается в заголовок.

Аргумент mode может быть одним из 'r', 'rb', 'a', 'ab', 'w', или 'wb', в зависимости от того, будет ли файл читаться или записываться. Значение по умолчанию – режим fileobj, если его можно определить; в противном случае – 'rb'. Если он не задан, к режиму будет добавлен флаг 'b' для открытия файла в бинарном режиме для обеспечения переносимости между платформами.

Аргумент compresslevel – целое число от 1 до 9, управляющее уровнем сжатия; 1 – самый быстрый и даёт наименьшее сжатие, а 9 – самый медленный и даёт наибольшее сжатие. По умолчанию 9.

Аргумент mtime – необязательная числовая временная метка, которая будет записана в поток при сжатии. Все сжатые потоки gzip должны содержать временную метку. Если он опущен или равен None, используется текущее время. Этот модуль игнорирует временную метку при распаковке; однако некоторые программы, такие как gunzip, используют её. Формат временной метки такой же, как у возвращаемого значения time.time() и у члена st_mtime объекта, возвращаемого os.stat().

Вызов метода close() объекта GzipFile не закрывает fileobj, поскольку может потребоваться добавить ещё данные после сжатых. Это также позволяет передать объект StringIO, открытый для записи, в качестве fileobj, и получить результирующий буфер в памяти с помощью метода getvalue() объекта StringIO.

GzipFile поддерживает оператор with.

Изменено в версии 3.1: Добавлена поддержка оператора with.

gzip.open(filename, mode='rb', compresslevel=9)
Это сокращение для GzipFile(filename, mode, compresslevel). Аргумент filename обязателен; mode по умолчанию равен 'rb', а compresslevel по умолчанию равен 9.

12.2.1. Примеры использованияExamples of usage

Пример чтения сжатого файла:

import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
    file_content = f.read()

Пример создания сжатого файла GZIP:

import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
    f.write(content)

Пример сжатия существующего файла в формате GZIP:

import gzip
with open('/home/joe/file.txt', 'rb') as f_in:
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
        f_out.writelines(f_in)

См. также

Модуль zlib
Базовый модуль сжатия данных, необходимый для поддержки формата файлов gzip.