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

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

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


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

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

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

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

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

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

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

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

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

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

Обратите внимание, что файл всегда открывается в бинарном режиме; текстовый режим не поддерживается. Если нужно прочитать сжатый файл в текстовом режиме, оберните GzipFile в io.TextIOWrapper.

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

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

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

GzipFile поддерживает интерфейс io.BufferedIOBase, включая итерацию и оператор with. Не реализованы только методы read1() и truncate().

GzipFile также предоставляет следующий метод:

peek([n])

Читает n несжатых байтов без изменения позиции в файле. Для выполнения вызова производится не более одного чтения из сжатого потока. Возвращаемое количество байтов может быть больше или меньше запрошенного.

Новое в версии 3.2.

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

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

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

gzip.open(filename, mode='rb', compresslevel=9)

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

gzip.compress(data, compresslevel=9)

Сжимает data и возвращает объект bytes, содержащий сжатые данные. compresslevel имеет то же значение, что и в конструкторе GzipFile выше.

Новое в версии 3.2.

gzip.decompress(data)

Распаковывает data и возвращает объект bytes, содержащий несжатые данные.

Новое в версии 3.2.

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)

Пример сжатия бинарной строки в формате GZIP:

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)

См. также

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