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 — это временная метка, запрошенная gzip. Время задаётся в формате Unix, то есть в секундах с 00:00:00 UTC 1 января 1970 года. Если mtime не указан или равен
None, используется текущее время. Установите mtime = 0, чтобы сгенерировать сжатый поток, не зависящий от времени создания.См. ниже описание атрибута
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.
-
mode -
'rb'для чтения и'wb'для записи.Изменено в версии 3.13: В предыдущих версиях это было целое число
1или2.
-
mtime -
При распаковке этому атрибуту присваивается последняя временная метка из последнего прочитанного заголовка. Это целое число, содержащее количество секунд с начала эпохи Unix (00:00:00 UTC 1 января 1970 года). До чтения каких-либо заголовков начальным значением является
None.
-
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 считается устаревшим.Изменено в версии 3.12: Удалён атрибут
filename; вместо него используйте атрибутname. -
-
gzip.compress(data, compresslevel=9, *, mtime=None) -
Сжимает data и возвращает объект
bytes, содержащий сжатые данные. Аргументы compresslevel и mtime имеют тот же смысл, что и в описанном выше конструктореGzipFile.Добавлено в версии 3.2.
Изменено в версии 3.8: Добавлен параметр mtime для воспроизводимого вывода.
Изменено в версии 3.11: Скорость повышена за счёт сжатия всех данных за один раз, а не потоковым способом. Вызовы, где mtime задан как
0, перенаправляются вzlib.compress()для повышения скорости. В этом случае байт «OS» заголовка gzip может иметь значение, отличное от 255 («неизвестно»), поскольку оно задаётся используемой реализацией zlib.Изменено в версии 3.13: Гарантируется, что байт OS заголовка gzip будет равен 255, как и в версиях 3.10 и более ранних.
-
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 является узким местом, пакет python-isal ускоряет сжатие и распаковку, предоставляя в основном совместимый API.
Интерфейс командной строки
Модуль gzip предоставляет простой интерфейс командной строки для сжатия и распаковки файлов.
После выполнения модуль gzip сохраняет входные файлы.
Изменено в версии 3.8: Добавлен новый интерфейс командной строки с описанием использования. По умолчанию при запуске интерфейса командной строки используется уровень сжатия 6.
Параметры командной строки
-
file -
Если file не указан, данные считываются из
sys.stdin.
-
--fast -
Указывает использовать самый быстрый метод сжатия (с меньшей степенью сжатия).
-
--best -
Указывает использовать самый медленный метод сжатия (с наилучшей степенью сжатия).
-
-d, --decompress -
Распаковать указанный файл.
-
-h, --help -
Показать справочное сообщение.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/gzip.html