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

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

Исходный код: Lib/gzip.py


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

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

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

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

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

class gzip.GzipFile([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])

Конструктор класса 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 – целое число от 0 до 9, управляющее уровнем сжатия; 1 – самый быстрый и даёт наименьшее сжатие, а 9 – самый медленный и даёт наибольшее сжатие. 0 – это отсутствие сжатия. По умолчанию 9.

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

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

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

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

Изменено в версии 2.7: Добавлена поддержка файлов с нулевым заполнением.

Новое в версии 2.7: Аргумент mtime.

gzip.open(filename[, mode[, compresslevel]])

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

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

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

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

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

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

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

import gzip
import shutil
with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:
    shutil.copyfileobj(f_in, f_out)

См. также

Модуль zlib

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