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