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. При обработке некорректных файлов gzip также могут возникать исключенияEOFErrorиzlib.error.Добавлено в версии 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'. В будущих версиях Python режим fileobj использоваться не будет. При записи рекомендуется всегда указывать mode.Обратите внимание: файл всегда открывается в двоичном режиме. Чтобы открыть сжатый файл в текстовом режиме, используйте
open()(или обернитеGzipFileвio.TextIOWrapper).Аргумент compresslevel — целое число от
0до9, задающее уровень сжатия;1обеспечивает наибольшую скорость и наименьшую степень сжатия, а9— наименьшую скорость и наибольшую степень сжатия.0означает отсутствие сжатия. По умолчанию используется9.Аргумент mtime — необязательная числовая метка времени, записываемая при сжатии в поле времени последнего изменения потока. Его следует указывать только в режиме сжатия. Если аргумент опущен или равен
None, используется текущее время. Подробнее см. описание атрибутаmtime.Вызов метода
close()объектаGzipFileне закрывает fileobj, поскольку после сжатых данных может потребоваться добавить другие данные. Это также позволяет передать в качестве fileobj открытый для записи объектio.BytesIOи получить результирующий буфер памяти с помощью методаgetvalue()объектаio.BytesIO.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().
-
name -
Путь к файлу gzip на диске в виде объекта
strилиbytes. Эквивалентен результату вызоваos.fspath()для исходного пути без какой-либо дополнительной нормализации, разрешения или раскрытия.
Изменено в версии 3.1: Добавлена поддержка инструкции
with, а также аргумент конструктора mtime и атрибутmtime.Изменено в версии 3.2: Добавлена поддержка файлов с заполнением нулями и файлов без возможности перемещения по ним.
Изменено в версии 3.3: Теперь реализован метод
io.BufferedIOBase.read1().Изменено в версии 3.4: Добавлена поддержка режимов
'x'и'xb'.Изменено в версии 3.5: Добавлена поддержка записи произвольных объектов, подобных bytes. Метод
read()теперь принимает аргументNone.Изменено в версии 3.6: Принимает объект, подобный пути.
Устарело с версии 3.9: Открытие
GzipFileдля записи без указания аргумента mode считается устаревшим. -
-
gzip.compress(data, compresslevel=9, *, mtime=None) -
Сжимает data и возвращает объект
bytes, содержащий сжатые данные. Аргументы compresslevel и mtime имеют то же значение, что и в описанном выше конструктореGzipFile. Если для mtime задано значение0, эта функция эквивалентна функцииzlib.compress()со значением wbits, равным31. Функция zlib работает быстрее.Добавлено в версии 3.2.
Изменено в версии 3.8: Добавлен параметр mtime для получения воспроизводимого результата.
Изменено в версии 3.11: Производительность повышена: все данные сжимаются за один раз, а не потоковым способом. Вызовы, в которых для mtime задано значение
0, передаются функцииzlib.compress()для повышения производительности. В этом случае байт «OS» в заголовке gzip может иметь значение, отличное от 255 («неизвестно»), которое задаёт лежащая в основе реализация zlib.
-
gzip.decompress(data) -
Распаковывает data и возвращает объект
bytes, содержащий распакованные данные. Эта функция может распаковывать gzip-данные, состоящие из нескольких элементов (нескольких блоков gzip, объединённых друг с другом). Если данные заведомо содержат только один элемент, функцияzlib.decompress()со значением wbits, равным 31, работает быстрее.Добавлено в версии 3.2.
Изменено в версии 3.11: Производительность повышена: элементы распаковываются в памяти целиком, а не потоковым способом.
Примеры использования
Пример чтения сжатого файла:
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)
См. также
-
Modulezlib -
Базовый модуль сжатия данных, необходимый для поддержки формата файлов gzip.
Интерфейс командной строки
Модуль gzip предоставляет простой интерфейс командной строки для сжатия и распаковки файлов.
После выполнения модуль gzip сохраняет входные файлы.
Изменено в версии 3.8: Добавлен новый интерфейс командной строки со справкой по использованию. По умолчанию при запуске интерфейса командной строки используется уровень сжатия 6.
Параметры командной строки
-
file -
Если file не указан, чтение выполняется из
sys.stdin.
-
--fast -
Указывает самый быстрый метод сжатия (с меньшей степенью сжатия).
-
--best -
Указывает самый медленный метод сжатия (с наибольшей степенью сжатия).
-
-d, --decompress -
Распаковать указанный файл.
-
-h, --help -
Показать справочное сообщение.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/gzip.html