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.