gzip.md
1> **Источник:** https://python-all.ru/3.1/library/gzip.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.2. `gzip` – Поддержка **gzip**-файлов89Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU **gzip** и **gunzip**.1011Сжатие данных обеспечивается модулем [`zlib`](https://python-all.ru/3.1/library/zlib.html#module-zlib).1213Модуль `gzip` предоставляет класс [`GzipFile`](https://python-all.ru/3.1/library/gzip.html#gzip.GzipFile). Класс [`GzipFile`](https://python-all.ru/3.1/library/gzip.html#gzip.GzipFile) читает и записывает файлы в формате **gzip**, автоматически сжимая или распаковывая данные так, что они выглядят как обычный [*файловый объект*](https://python-all.ru/3.1/glossary.html#term-file-object).1415Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами **gzip** и **gunzip**, например, созданные программами **compress** и **pack**, не поддерживаются этим модулем.1617О других форматах архивов см. модули [`bz2`](https://python-all.ru/3.1/library/bz2.html#module-bz2), [`zipfile`](https://python-all.ru/3.1/library/zipfile.html#module-zipfile) и [`tarfile`](https://python-all.ru/3.1/library/tarfile.html#module-tarfile).1819Модуль определяет следующие элементы:2021#### `class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)`2223Конструктор класса [`GzipFile`](https://python-all.ru/3.1/library/gzip.html#gzip.GzipFile), который имитирует большинство методов [*файлового объекта*](https://python-all.ru/3.1/glossary.html#term-file-object), за исключением методов `readinto()` и `truncate()`. По крайней мере один из *fileobj* и *filename* должен получить непустое значение.2425Новый экземпляр класса основан на *fileobj*, который может быть обычным файлом, объектом `StringIO` или любым другим объектом, имитирующим файл. По умолчанию он равен `None`, и в этом случае *filename* открывается для предоставления файлового объекта.2627Если *fileobj* не равен `None`, аргумент *filename* используется только для включения в заголовок файла **gzip**, который может содержать исходное имя несжатого файла. По умолчанию он равен имени файла *fileobj*, если оно определимо; в противном случае он равен пустой строке, и в этом случае исходное имя файла не включается в заголовок.2829Аргумент *mode* может быть одним из `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, или `'wb'`, в зависимости от того, будет ли файл читаться или записываться. Значение по умолчанию – режим *fileobj*, если его можно определить; в противном случае – `'rb'`. Если он не задан, к режиму будет добавлен флаг 'b' для открытия файла в бинарном режиме для обеспечения переносимости между платформами.3031Аргумент *compresslevel* – целое число от `1` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, а `9` – самый медленный и даёт наибольшее сжатие. По умолчанию `9`.3233Аргумент *mtime* – необязательная числовая временная метка, которая будет записана в поток при сжатии. Все сжатые потоки **gzip** должны содержать временную метку. Если он опущен или равен `None`, используется текущее время. Этот модуль игнорирует временную метку при распаковке; однако некоторые программы, такие как **gunzip**, используют её. Формат временной метки такой же, как у возвращаемого значения `time.time()` и у члена `st_mtime` объекта, возвращаемого `os.stat()`.3435Вызов метода `close()` объекта [`GzipFile`](https://python-all.ru/3.1/library/gzip.html#gzip.GzipFile) не закрывает *fileobj*, поскольку может потребоваться добавить ещё данные после сжатых. Это также позволяет передать объект `StringIO`, открытый для записи, в качестве *fileobj*, и получить результирующий буфер в памяти с помощью метода `getvalue()` объекта `StringIO`.3637[`GzipFile`](https://python-all.ru/3.1/library/gzip.html#gzip.GzipFile) поддерживает оператор [`with`](https://python-all.ru/3.1/reference/compound_stmts.html#with).3839Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.1/reference/compound_stmts.html#with).4041#### `gzip.open(filename, mode='rb', compresslevel=9)`4243Это сокращение для4445`GzipFile(filename,`4647`mode,`4849`compresslevel)`5051. Аргумент5253*filename*5455обязателен;5657*mode*5859по умолчанию равен6061`'rb'`6263, а6465*compresslevel*6667по умолчанию равен6869`9`7071.7273## 12.2.1. Примеры использования7475Пример чтения сжатого файла:7677```python78import gzip79with gzip.open('/home/joe/file.txt.gz', 'rb') as f:80 file_content = f.read()81```8283Пример создания сжатого файла GZIP:8485```python86import gzip87content = b"Lots of content here"88with gzip.open('/home/joe/file.txt.gz', 'wb') as f:89 f.write(content)90```9192Пример сжатия существующего файла в формате GZIP:9394```python95import gzip96with open('/home/joe/file.txt', 'rb') as f_in:97 with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:98 f_out.writelines(f_in)99```100101> **См. также**102>103> **Модуль [`zlib`](https://python-all.ru/3.1/library/zlib.html#module-zlib)**104>105> Базовый модуль сжатия данных, необходимый для поддержки формата файлов106>107> **gzip**108>109> .110