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()(или обернитеGzipFileio.TextIOWrapper).Аргумент compresslevel представляет собой целое число от
0до9, контролирующее уровень сжатия;1быстрее и производит наименьшее сжатие, а9медленнее и производит наибольшее сжатие.0отсутствует сжатие. Значение по умолчанию -9.Аргумент mtime - это необязательная числовая временная метка, которая записывается в последнее поле времени изменения в потоке при сжатии. Она должна предоставляться только в режиме сжатия. Если пропущено или
None, текущее время равно используемый. Дополнительные сведения см. в разделеmtimeатрибут.Запрос метода объекта
GzipFileclose()не закрывает fileobj, так как вы могли бы хотеть приложить больше материала после сжатых данных. Это также позволяет вам передавать объектio.BytesIO, открытый для написания как fileobj и восстанавливать получающийся буфер памяти использование метода объектаio.BytesIOgetvalue().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.
