gzip.md
1> **Источник:** https://python-all.ru/2.7/library/gzip.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.2. [`gzip`](https://python-all.ru/2.7/library/gzip.html#module-gzip) – Поддержка **gzip**-файлов89**Исходный код:** [Lib/gzip.py](https://python-all.ru/src/2.7/Lib/gzip.py)1011---1213Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU **gzip** и **gunzip**.1415Сжатие данных обеспечивается модулем [`zlib`](https://python-all.ru/2.7/library/zlib.html#module-zlib).1617Модуль [`gzip`](https://python-all.ru/2.7/library/gzip.html#module-gzip) предоставляет класс [`GzipFile`](https://python-all.ru/2.7/library/gzip.html#gzip.GzipFile), который смоделирован по образу файлового объекта Python. Класс [`GzipFile`](https://python-all.ru/2.7/library/gzip.html#gzip.GzipFile) читает и записывает файлы в формате **gzip**, автоматически сжимая или распаковывая данные, так что он выглядит как обычный файловый объект.1819Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами **gzip** и **gunzip**, например, созданные программами **compress** и **pack**, не поддерживаются этим модулем.2021Модуль определяет следующие элементы:2223#### `class gzip.GzipFile([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])`2425Конструктор класса [`GzipFile`](https://python-all.ru/2.7/library/gzip.html#gzip.GzipFile), который имитирует большинство методов файлового объекта, за исключением методов `readinto()` и `truncate()`. Как минимум один из аргументов *fileobj* или *filename* должен иметь непустое значение.2627Новый экземпляр класса основан на *fileobj*, который может быть обычным файлом, объектом [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) или любым другим объектом, имитирующим файл. По умолчанию он равен `None`, и в этом случае открывается *filename* для получения файлового объекта.2829Если *fileobj* не равен `None`, аргумент *filename* используется только для включения в заголовок файла **gzip**, который может содержать исходное имя файла несжатого файла. По умолчанию он равен имени файла *fileobj*, если его можно определить; в противном случае по умолчанию используется пустая строка, и в этом случае исходное имя файла не включается в заголовок.3031Аргумент *mode* может принимать одно из значений `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'` или `'wb'`, в зависимости от того, будет ли файл читаться или записываться. По умолчанию берётся режим *fileobj*, если он определён; в противном случае по умолчанию используется `'rb'`. Если аргумент не указан, к режиму будет добавлен флаг 'b', чтобы обеспечить открытие файла в двоичном режиме для кроссплатформенной переносимости.3233Аргумент *compresslevel* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, а `9` – самый медленный и даёт наибольшее сжатие. `0` – это отсутствие сжатия. По умолчанию `9`.3435Аргумент *mtime* – это необязательная числовая метка времени, которая будет записана в поток при сжатии. Все сжатые потоки **gzip** должны содержать метку времени. Если он опущен или равен `None`, используется текущее время. Этот модуль игнорирует метку времени при распаковке; однако некоторые программы, такие как **gunzip**, используют её. Формат метки времени такой же, как у возвращаемого значения `time.time()` и атрибута `st_mtime` объекта, возвращаемого `os.stat()`.3637Вызов метода `close()` объекта [`GzipFile`](https://python-all.ru/2.7/library/gzip.html#gzip.GzipFile) не закрывает *fileobj*, поскольку может потребоваться добавить ещё данные после сжатых. Это также позволяет передать объект [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO), открытый для записи, в качестве *fileobj* и извлечь полученный буфер памяти с помощью метода [`getvalue()`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO.getvalue) объекта [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO).3839[`GzipFile`](https://python-all.ru/2.7/library/gzip.html#gzip.GzipFile) поддерживает итерацию и оператор [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).4041Изменено в версии 2.7: Добавлена поддержка оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).4243Изменено в версии 2.7: Добавлена поддержка файлов с нулевым заполнением.4445Новое в версии 2.7: Аргумент *mtime*.4647#### `gzip.open(filename[, mode[, compresslevel]])`4849Это сокращённая запись для `GzipFile(filename,` `mode,` `compresslevel)`. Аргумент *filename* обязателен; *mode* по умолчанию равен `'rb'`, а *compresslevel* по умолчанию равен `9`.5051## 12.2.1. Примеры использования5253Пример чтения сжатого файла:5455```python56import gzip57with gzip.open('file.txt.gz', 'rb') as f:58 file_content = f.read()59```6061Пример создания сжатого файла GZIP:6263```python64import gzip65content = "Lots of content here"66with gzip.open('file.txt.gz', 'wb') as f:67 f.write(content)68```6970Пример сжатия существующего файла в формате GZIP:7172```python73import gzip74import shutil75with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:76 shutil.copyfileobj(f_in, f_out)77```7879> **См. также**80>81> **Модуль [`zlib`](https://python-all.ru/2.7/library/zlib.html#module-zlib)**82>83> Базовый модуль сжатия данных, необходимый для поддержки формата файлов **gzip**.84