Содержание страницы
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.