gzip.md
1> **Источник:** https://python-all.ru/3.2/library/gzip.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.2. [`gzip`](https://python-all.ru/3.2/library/gzip.html#module-gzip) – Поддержка файлов **gzip**89**Исходный код:** [Lib/gzip.py](https://python-all.ru/src/3.2/Lib/gzip.py)1011---1213Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU **gzip** и **gunzip**.1415Сжатие данных обеспечивается модулем [`zlib`](https://python-all.ru/3.2/library/zlib.html#module-zlib).1617Модуль [`gzip`](https://python-all.ru/3.2/library/gzip.html#module-gzip) предоставляет класс [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile). Класс [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) читает и записывает файлы в формате **gzip**, автоматически сжимая или распаковывая данные, так что он выглядит как обычный [*файловый объект*](https://python-all.ru/3.2/glossary.html#term-file-object).1819Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами **gzip** и **gunzip**, например, созданные программами **compress** и **pack**, не поддерживаются этим модулем.2021Модуль определяет следующие элементы:2223#### `class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)`2425Конструктор класса [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile), который имитирует большинство методов [*файлового объекта*](https://python-all.ru/3.2/glossary.html#term-file-object), за исключением метода `truncate()`. По крайней мере один из аргументов *fileobj* или *filename* должен иметь нетривиальное значение.2627Новый экземпляр класса основан на *fileobj*, который может быть обычным файлом, объектом `StringIO` или любым другим объектом, имитирующим файл. По умолчанию он равен `None`, и в этом случае *filename* открывается для предоставления файлового объекта.2829Если *fileobj* не равен `None`, аргумент *filename* используется только для включения в заголовок файла **gzip**, который может содержать исходное имя несжатого файла. По умолчанию он равен имени файла *fileobj*, если оно определимо; в противном случае он равен пустой строке, и в этом случае исходное имя файла не включается в заголовок.3031Аргумент *mode* может быть любым из `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, или `'wb'`, в зависимости от того, будет ли файл читаться или записываться. По умолчанию используется режим *fileobj*, если его можно определить; в противном случае по умолчанию используется `'rb'`.3233Обратите внимание, что файл всегда открывается в бинарном режиме; текстовый режим не поддерживается. Если нужно прочитать сжатый файл в текстовом режиме, оберните [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) в [`io.TextIOWrapper`](https://python-all.ru/3.2/library/io.html#io.TextIOWrapper).3435Аргумент *compresslevel* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, а `9` – самый медленный и даёт наибольшее сжатие. `0` – это отсутствие сжатия. По умолчанию `9`.3637Аргумент *mtime* – необязательная числовая метка времени, которая записывается в поток при сжатии. Все сжатые потоки **gzip** должны содержать метку времени. Если она опущена или равна `None`, используется текущее время. Этот модуль игнорирует метку времени при распаковке; однако некоторые программы, такие как **gunzip**, используют её. Формат метки времени такой же, как у возвращаемого значения `time.time()` и атрибута `st_mtime` объекта, возвращаемого `os.stat()`.3839Вызов метода `close()` объекта [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) не закрывает *fileobj*, так как может потребоваться добавить ещё данные после сжатых данных. Это также позволяет передать объект [`io.BytesIO`](https://python-all.ru/3.2/library/io.html#io.BytesIO), открытый для записи, в качестве *fileobj* и получить результирующий буфер памяти с помощью метода [`getvalue()`](https://python-all.ru/3.2/library/io.html#io.BytesIO.getvalue) объекта [`io.BytesIO`](https://python-all.ru/3.2/library/io.html#io.BytesIO).4041[`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) поддерживает интерфейс [`io.BufferedIOBase`](https://python-all.ru/3.2/library/io.html#io.BufferedIOBase), включая итерацию и оператор [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with). Не реализованы только методы `read1()` и `truncate()`.4243[`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) также предоставляет следующий метод:4445#### `peek([n])`4647Читает *n* несжатых байтов без изменения позиции в файле. Для выполнения вызова производится не более одного чтения из сжатого потока. Возвращаемое количество байтов может быть больше или меньше запрошенного.4849Новое в версии 3.2.5051Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.2/reference/compound_stmts.html#with).5253Изменено в версии 3.2: Добавлена поддержка файлов с нулевым заполнением.5455Изменено в версии 3.2: Добавлена поддержка непозиционируемых файлов.5657#### `gzip.open(filename, mode='rb', compresslevel=9)`5859Это сокращение для `GzipFile(filename,` `mode,` `compresslevel)`. Аргумент *filename* обязателен; *mode* по умолчанию равен `'rb'`, а *compresslevel* по умолчанию равен `9`.6061#### `gzip.compress(data, compresslevel=9)`6263Сжимает *data* и возвращает объект [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), содержащий сжатые данные. *compresslevel* имеет то же значение, что и в конструкторе [`GzipFile`](https://python-all.ru/3.2/library/gzip.html#gzip.GzipFile) выше.6465Новое в версии 3.2.6667#### `gzip.decompress(data)`6869Распаковывает *data* и возвращает объект [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), содержащий несжатые данные.7071Новое в версии 3.2.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Пример сжатия бинарной строки в формате GZIP:102103```python104import gzip105s_in = b"Lots of content here"106s_out = gzip.compress(s_in)107```108109> **См. также**110>111> **Модуль [`zlib`](https://python-all.ru/3.2/library/zlib.html#module-zlib)**112>113> Базовый модуль сжатия данных, необходимый для поддержки формата файлов114>115> **gzip**116>117> .118