gzip.md
1> **Источник:** https://python-all.ru/3.8/library/gzip.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`gzip`](https://python-all.ru/3.8/library/gzip.html#module-gzip) – Поддержка файлов **gzip**89**Исходный код:** [Lib/gzip.py](https://python-all.ru/src/3.8/Lib/gzip.py)1011---1213Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU **gzip** и **gunzip**.1415Сжатие данных обеспечивается модулем [`zlib`](https://python-all.ru/3.8/library/zlib.html#module-zlib).1617Модуль [`gzip`](https://python-all.ru/3.8/library/gzip.html#module-gzip) предоставляет класс [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile), а также вспомогательные функции [`open()`](https://python-all.ru/3.8/library/gzip.html#gzip.open), [`compress()`](https://python-all.ru/3.8/library/gzip.html#gzip.compress) и [`decompress()`](https://python-all.ru/3.8/library/gzip.html#gzip.decompress). Класс [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) читает и записывает файлы в формате **gzip**, автоматически сжимая или распаковывая данные, так что он выглядит как обычный [файловый объект](https://python-all.ru/3.8/glossary.html#term-file-object).1819Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами **gzip** и **gunzip**, например, созданные программами **compress** и **pack**, не поддерживаются этим модулем.2021Модуль определяет следующие элементы:2223#### `gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)`2425Открывает файл, сжатый gzip, в двоичном или текстовом режиме и возвращает [файловый объект](https://python-all.ru/3.8/glossary.html#term-file-object).2627Аргумент *filename* может быть фактическим именем файла (объектом [`str`](https://python-all.ru/3.8/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes)) или существующим файловым объектом для чтения или записи.2829Аргумент *mode* может быть любым из `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, `'wb'`, `'x'` или `'xb'` для бинарного режима, или `'rt'`, `'at'`, `'wt'` или `'xt'` для текстового режима. По умолчанию `'rb'`.3031Аргумент *compresslevel* – целое число от 0 до 9, как для конструктора [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile).3233В двоичном режиме эта функция эквивалентна конструктору [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile): `GzipFile(filename, mode, compresslevel)`. В этом случае аргументы *encoding*, *errors* и *newline* не должны быть указаны.3435Для текстового режима создаётся объект [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile), обёрнутый в экземпляр [`io.TextIOWrapper`](https://python-all.ru/3.8/library/io.html#io.TextIOWrapper) с указанными кодировкой, поведением при ошибках и символами конца строки.3637Изменено в версии 3.3: Добавлена поддержка *filename* в качестве файлового объекта, поддержка текстового режима, и аргументов *encoding*, *errors* и *newline*.3839Изменено в версии 3.4: Добавлена поддержка режимов `'x'`, `'xb'` и `'xt'`.4041Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.8/glossary.html#term-path-like-object).4243#### `exception gzip.BadGzipFile`4445Исключение, возникающее при недопустимых gzip-файлах. Оно наследует [`OSError`](https://python-all.ru/3.8/library/exceptions.html#OSError). [`EOFError`](https://python-all.ru/3.8/library/exceptions.html#EOFError) и [`zlib.error`](https://python-all.ru/3.8/library/zlib.html#zlib.error) также могут возникать для недопустимых gzip-файлов.4647Новое в версии 3.8.4849#### `class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)`5051Конструктор класса [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile), который имитирует большинство методов [файлового объекта](https://python-all.ru/3.8/glossary.html#term-file-object), за исключением метода `truncate()`. По крайней мере один из *fileobj* и *filename* должен иметь нетривиальное значение.5253Новый экземпляр класса основан на *fileobj*, который может быть обычным файлом, объектом [`io.BytesIO`](https://python-all.ru/3.8/library/io.html#io.BytesIO) или любым другим объектом, имитирующим файл. По умолчанию он равен `None`, и в этом случае *filename* открывается для предоставления файлового объекта.5455Если *fileobj* не равен `None`, аргумент *filename* используется только для включения в заголовок файла **gzip**, который может содержать исходное имя файла несжатого файла. По умолчанию он равен имени файла *fileobj*, если его можно определить; в противном случае по умолчанию используется пустая строка, и в этом случае исходное имя файла не включается в заголовок.5657Аргумент *mode* может принимать одно из значений `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, `'wb'`, `'x'` или `'xb'`, в зависимости от того, будет ли файл читаться или записываться. По умолчанию берётся режим *fileobj*, если его можно определить; в противном случае используется `'rb'`.5859Обратите внимание, что файл всегда открывается в двоичном режиме. Чтобы открыть сжатый файл в текстовом режиме, используйте [`open()`](https://python-all.ru/3.8/library/gzip.html#gzip.open) (или оберните свой [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) с помощью [`io.TextIOWrapper`](https://python-all.ru/3.8/library/io.html#io.TextIOWrapper)).6061Аргумент *compresslevel* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, а `9` – самый медленный и даёт наибольшее сжатие. `0` – это отсутствие сжатия. По умолчанию `9`.6263Аргумент *mtime* – необязательная числовая метка времени, которая записывается в поле времени последнего изменения потока при сжатии. Его следует указывать только в режиме сжатия. Если он опущен или равен `None`, используется текущее время. Подробнее см. в атрибуте [`mtime`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile.mtime).6465Вызов метода `close()` объекта [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) не закрывает *fileobj*, поскольку может потребоваться добавить ещё данные после сжатых данных. Это также позволяет передать объект [`io.BytesIO`](https://python-all.ru/3.8/library/io.html#io.BytesIO), открытый для записи, в качестве *fileobj*, и получить результирующий буфер в памяти с помощью метода [`getvalue()`](https://python-all.ru/3.8/library/io.html#io.BytesIO.getvalue) объекта [`io.BytesIO`](https://python-all.ru/3.8/library/io.html#io.BytesIO).6667[`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) поддерживает интерфейс [`io.BufferedIOBase`](https://python-all.ru/3.8/library/io.html#io.BufferedIOBase), включая итерацию и оператор [`with`](https://python-all.ru/3.8/reference/compound_stmts.html#with). Не реализован только метод `truncate()`.6869[`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) также предоставляет следующий метод и атрибут:7071#### `peek(n)`7273Читает *n* несжатых байтов без изменения позиции в файле. Для выполнения вызова производится не более одного чтения из сжатого потока. Возвращаемое количество байтов может быть больше или меньше запрошенного.7475> **Примечание**76>77> Хотя вызов [`peek()`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile.peek) не изменяет позицию файла объекта [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile), он может изменить позицию нижележащего файлового объекта (например, если [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) был создан с параметром *fileobj*).7879Новое в версии 3.2.8081#### `mtime`8283При распаковке значение поля времени последнего изменения из последнего прочитанного заголовка может быть получено из этого атрибута в виде целого числа. Начальное значение до чтения любых заголовков – `None`.8485Все сжатые потоки **gzip** обязаны содержать это поле метки времени. Некоторые программы, например **gunzip**, используют эту метку. Формат совпадает с возвращаемым значением [`time.time()`](https://python-all.ru/3.8/library/time.html#time.time) и атрибутом [`st_mtime`](https://python-all.ru/3.8/library/os.html#os.stat_result.st_mtime) объекта, возвращаемого [`os.stat()`](https://python-all.ru/3.8/library/os.html#os.stat).8687Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.8/reference/compound_stmts.html#with), а также аргумента конструктора *mtime* и атрибута [`mtime`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile.mtime).8889Изменено в версии 3.2: Добавлена поддержка файлов с дополнением нулями и непозиционируемых файлов.9091Изменено в версии 3.3: Теперь реализован метод [`io.BufferedIOBase.read1()`](https://python-all.ru/3.8/library/io.html#io.BufferedIOBase.read1).9293Изменено в версии 3.4: Добавлена поддержка режимов `'x'` и `'xb'`.9495Изменено в версии 3.5: Добавлена поддержка записи произвольных [байтоподобных объектов](https://python-all.ru/3.8/glossary.html#term-bytes-like-object). Метод [`read()`](https://python-all.ru/3.8/library/io.html#io.BufferedIOBase.read) теперь принимает аргумент `None`.9697Изменено в версии 3.6: Принимает [объект, подобный пути](https://python-all.ru/3.8/glossary.html#term-path-like-object).9899#### `gzip.compress(data, compresslevel=9, *, mtime=None)`100101Сжимает *данные* и возвращает объект [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes), содержащий сжатые данные. Параметры *compresslevel* и *mtime* имеют то же значение, что и в конструкторе [`GzipFile`](https://python-all.ru/3.8/library/gzip.html#gzip.GzipFile) выше.102103Новое в версии 3.2.104105Изменено в версии 3.8: Добавлен параметр *mtime* для воспроизводимого вывода.106107#### `gzip.decompress(data)`108109Распаковывает *data*, возвращая объект [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes), содержащий распакованные данные.110111Новое в версии 3.2.112113## Примеры использования114115Пример чтения сжатого файла:116117```python118import gzip119with gzip.open('/home/joe/file.txt.gz', 'rb') as f:120 file_content = f.read()121```122123Пример создания сжатого файла GZIP:124125```python126import gzip127content = b"Lots of content here"128with gzip.open('/home/joe/file.txt.gz', 'wb') as f:129 f.write(content)130```131132Пример сжатия существующего файла в формате GZIP:133134```python135import gzip136import shutil137with open('/home/joe/file.txt', 'rb') as f_in:138 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:139 shutil.copyfileobj(f_in, f_out)140```141142Пример сжатия бинарной строки в формате GZIP:143144```python145import gzip146s_in = b"Lots of content here"147s_out = gzip.compress(s_in)148```149150> **См. также**151>152> **Модуль [`zlib`](https://python-all.ru/3.8/library/zlib.html#module-zlib)**153>154> Базовый модуль сжатия данных, необходимый для поддержки формата файлов **gzip**.155156## Интерфейс командной строки157158Модуль [`gzip`](https://python-all.ru/3.8/library/gzip.html#module-gzip) предоставляет простой интерфейс командной строки для сжатия или распаковки файлов.159160После выполнения модуль [`gzip`](https://python-all.ru/3.8/library/gzip.html#module-gzip) сохраняет входной файл(ы).161162Изменено в версии 3.8: Добавлен новый интерфейс командной строки с описанием использования. По умолчанию при выполнении CLI уровень сжатия равен 6.163164### Параметры командной строки165166#### `file`167168Если *file* не указан, чтение из [`sys.stdin`](https://python-all.ru/3.8/library/sys.html#sys.stdin).169170#### `--fast`171172Указывает самый быстрый метод сжатия (меньше степень сжатия).173174#### `--best`175176Указывает самый медленный метод сжатия (наилучшее сжатие).177178#### `-d, --decompress`179180Распаковывает указанный файл.181182#### `-h, --help`183184Показывает справочное сообщение.185