gzip — Поддержка gzip файлов

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


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

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

Модуль gzip обеспечивает класс GzipFile, а также функции удобства open(), compress() и decompress(). Класс GzipFile читает и пишет gzip-файлы формата, автоматически сжимая или развертывая данные так, чтобы это было похоже на обычный файловый объект.

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

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

gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

Открыть сжатый gzip файл в двоичном или текстовом режиме, возвращая файловый объект.

Аргументом filename может быть фактическое имя файла (объект str или bytes) или существующий объект файла для чтения или записи.

Аргумент mode может быть любым из 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' или 'xb' для двоичного режима или 'rt', 'at', 'wt' или 'xt' для текстового режима. Значение по умолчанию - 'rb'.

Аргумент compresslevel является целым числом от 0 до 9, как для конструктора GzipFile.

Для двоичного режима эта функция эквивалентна конструктору GzipFile: GzipFile(filename, mode, compresslevel). В этом случае аргументы encoding, errors и newline не должны быть предоставлены.

Для текстового режима создается объект GzipFile, который помещается в io.TextIOWrapper сущность с указанным кодировка, поведением обработки ошибок и окончанием строки.

Изменено в версии 3.3: Добавлена поддержка filename как объекта файла, поддержка текстового режима и аргументов encoding, errors и newline.

Изменено в версии 3.4: Добавлена поддержка режимов 'x', 'xb' и 'xt'.

Изменено в версии 3.6: Принимает путеподобный объект.

exception gzip.BadGzipFile

Возникло исключение для недопустимых файлов gzip. Он наследует OSError. EOFError и zlib.error также могут быть подняты для недопустимых файлов gzip.

Добавлено в версии 3.8.

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

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

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

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

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

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

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

Аргумент mtime - это необязательная числовая временная метка, которая записывается в последнее поле времени изменения в потоке при сжатии. Она должна предоставляться только в режиме сжатия. Если пропущено или None, текущее время равно используемый. Дополнительные сведения см. в разделе mtime атрибут.

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

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

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

peek(n)

Прочитать несжатые байты n, не продвигая позицию файла. Самое большее одно считывание в сжатом потоке выполняется для удовлетворения вызова. Число байтов возвращенный может быть больше или меньше запрошенного.

Примечание

В то время как вызов peek() не меняет положение файла GzipFile, это может сменить положение основного объекта файла (например, если GzipFile был построен с параметром fileobj).

Добавлено в версии 3.2.

mtime

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

Сжатые потоки всего gzip обязаны содержать это поле метки времени. Некоторые программы, такие как gunzip, используют временную метку. Формат совпадает с форматом возвращает значение time.time() и st_mtime атрибут объекта возвращенный по os.stat().

Изменено в версии 3.1: Поддержка with инструкция была добавлена, наряду с аргументом конструктора mtime и mtime атрибут.

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

Изменено в версии 3.3: Метод io.BufferedIOBase.read1() теперь реализован.

Изменено в версии 3.4: Добавлена поддержка режимов 'x' и 'xb'.

Изменено в версии 3.5: Добавлена поддержка написания произвольных байтоподобных объектов. Метод read() теперь принимает аргумент None.

Изменено в версии 3.6: Принимает путеподобный объект.

gzip.compress(data, compresslevel=9, *, mtime=None)

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

Добавлено в версии 3.2.

Изменено в версии 3.8: Добавлен параметр mtime для воспроизводимого вывода.

gzip.decompress(data)

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

Добавлено в версии 3.2.

Примеры использования

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

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
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

Пример сжатия двоичного строка в GZIP:

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

См.также

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

Интерфейс командной строки

Модуль gzip предоставляет простой интерфейс командной строки для сжатия или распаковки файлов.

После выполнения модуль gzip сохраняет входные файлы.

Изменено в версии 3.8: Добавление нового интерфейса командной строки с использованием. По умолчанию при выполнении интерфейса командной строки уровень сжатия по умолчанию равен 6.

Параметры командной строки

file

Если file не указан, считывайте из sys.stdin.

--fast

Указывает самый быстрый метод сжатия (меньшее сжатие).

--best

Указывает самый медленный метод сжатия (наилучшее сжатие).

-d, --decompress

Распаковать данный файл.

-h, --help

Отображение справочного сообщения.