Документация Python неофициальный перевод

gzip.md

138 строк · 12.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.4/library/gzip.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 13.2. [`gzip`](https://python-all.ru/3.4/library/gzip.html#module-gzip) – Поддержка **gzip**-файлов89**Исходный код:** [Lib/gzip.py](https://python-all.ru/src/3.4/Lib/gzip.py)1011---1213Этот модуль предоставляет простой интерфейс для сжатия и распаковки файлов, подобно тому, как это делают программы GNU **gzip** и **gunzip**.1415Сжатие данных обеспечивается модулем [`zlib`](https://python-all.ru/3.4/library/zlib.html#module-zlib).1617Модуль [`gzip`](https://python-all.ru/3.4/library/gzip.html#module-gzip) предоставляет класс [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile), а также вспомогательные функции [`open()`](https://python-all.ru/3.4/library/gzip.html#gzip.open), [`compress()`](https://python-all.ru/3.4/library/gzip.html#gzip.compress) и [`decompress()`](https://python-all.ru/3.4/library/gzip.html#gzip.decompress). Класс [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) читает и записывает файлы в формате **gzip**, автоматически сжимая или распаковывая данные, так что они выглядят как обычный [*файловый объект*](https://python-all.ru/3.4/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.4/glossary.html#term-file-object).2627Аргумент *filename* может быть фактическим именем файла (объект [`str`](https://python-all.ru/3.4/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.4/library/functions.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.4/library/gzip.html#gzip.GzipFile).3233Для двоичного режима эта функция эквивалентна конструктору [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile): `GzipFile(filename, mode, compresslevel)`. В этом случае аргументы *encoding*, *errors* и *newline* указывать нельзя.3435Для текстового режима создаётся объект [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile), который оборачивается в экземпляр [`io.TextIOWrapper`](https://python-all.ru/3.4/library/io.html#io.TextIOWrapper) с указанной кодировкой, стратегией обработки ошибок и символами конца строки.3637Изменено в версии 3.3: Добавлена поддержка *filename* в качестве файлового объекта, поддержка текстового режима, и аргументов *encoding*, *errors* и *newline*.3839Изменено в версии 3.4: Добавлена поддержка режимов `'x'`, `'xb'` и `'xt'`.4041#### `class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)`4243Конструктор класса [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile), который имитирует большинство методов [*файлового объекта*](https://python-all.ru/3.4/glossary.html#term-file-object), за исключением метода `truncate()`. По крайней мере один из аргументов *fileobj* или *filename* должен иметь нетривиальное значение.4445Новый экземпляр класса основывается на *fileobj*, который может быть обычным файлом, объектом [`io.BytesIO`](https://python-all.ru/3.4/library/io.html#io.BytesIO) или любым другим объектом, имитирующим файл. По умолчанию `None`, и в этом случае *filename* открывается для получения файлового объекта.4647Если *fileobj* не равен `None`, аргумент *filename* используется только для включения в заголовок файла **gzip**, который может содержать исходное имя файла без сжатия. По умолчанию он равен имени файла *fileobj*, если его можно определить; в противном случае по умолчанию используется пустая строка, и в этом случае исходное имя файла не включается в заголовок.4849Аргумент *mode* может быть любым из `'r'`, `'rb'`, `'a'`, `'ab'`, `'w'`, `'wb'`, `'x'` или `'xb'`, в зависимости от того, будет ли файл читаться или записываться. По умолчанию используется режим *fileobj*, если его можно определить; в противном случае по умолчанию `'rb'`.5051Обратите внимание, что файл всегда открывается в двоичном режиме. Чтобы открыть сжатый файл в текстовом режиме, используйте [`open()`](https://python-all.ru/3.4/library/gzip.html#gzip.open) (или оберните свой [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) с помощью [`io.TextIOWrapper`](https://python-all.ru/3.4/library/io.html#io.TextIOWrapper)).5253Аргумент *compresslevel* – целое число от `0` до `9`, управляющее уровнем сжатия; `1` – самый быстрый и даёт наименьшее сжатие, а `9` – самый медленный и даёт наибольшее сжатие. `0` – это отсутствие сжатия. По умолчанию `9`.5455Аргумент *mtime* – необязательная числовая метка времени, которая записывается в поток при сжатии. Все сжатые потоки **gzip** должны содержать метку времени. Если она опущена или равна `None`, используется текущее время. Этот модуль игнорирует метку времени при распаковке; однако некоторые программы, такие как **gunzip**, используют её. Формат метки времени такой же, как у возвращаемого значения `time.time()` и атрибута `st_mtime` объекта, возвращаемого `os.stat()`.5657Вызов метода `close()` объекта [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) не закрывает *fileobj*, так как может потребоваться добавить данные после сжатого содержимого. Это также позволяет передать объект [`io.BytesIO`](https://python-all.ru/3.4/library/io.html#io.BytesIO), открытый для записи, в качестве *fileobj*, и получить результирующий буфер памяти с помощью метода [`io.BytesIO`](https://python-all.ru/3.4/library/io.html#io.BytesIO) [`getvalue()`](https://python-all.ru/3.4/library/io.html#io.BytesIO.getvalue).5859[`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) поддерживает интерфейс [`io.BufferedIOBase`](https://python-all.ru/3.4/library/io.html#io.BufferedIOBase), включая итерацию и оператор [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with). Не реализован только метод `truncate()`.6061[`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) также предоставляет следующий метод:6263#### `peek([n])`6465Читает *n* несжатых байтов без изменения позиции в файле. Для выполнения вызова производится не более одного чтения из сжатого потока. Возвращаемое количество байтов может быть больше или меньше запрошенного.6667> **Примечание**68>69> Хотя вызов [`peek()`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile.peek) не изменяет файловую позицию объекта [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile), он может изменить позицию базового файлового объекта (например, если [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) был создан с параметром *fileobj*).7071Новое в версии 3.2.7273Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with), а также аргумента *mtime*.7475Изменено в версии 3.2: Добавлена поддержка файлов с дополнением нулями и непозиционируемых файлов.7677Изменено в версии 3.3: Теперь реализован метод [`io.BufferedIOBase.read1()`](https://python-all.ru/3.4/library/io.html#io.BufferedIOBase.read1).7879Изменено в версии 3.4: Добавлена поддержка режимов `'x'` и `'xb'`.8081#### `gzip.compress(data, compresslevel=9)`8283Сжимает *data* и возвращает объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes), содержащий сжатые данные. *compresslevel* имеет то же значение, что и в конструкторе [`GzipFile`](https://python-all.ru/3.4/library/gzip.html#gzip.GzipFile) выше.8485Новое в версии 3.2.8687#### `gzip.decompress(data)`8889Распаковывает *data* и возвращает объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes), содержащий несжатые данные.9091Новое в версии 3.2.9293## 13.2.1. Примеры использования9495Пример чтения сжатого файла:9697```python98import gzip99with gzip.open('/home/joe/file.txt.gz', 'rb') as f:100    file_content = f.read()101```102103Пример создания сжатого файла GZIP:104105```python106import gzip107content = b"Lots of content here"108with gzip.open('/home/joe/file.txt.gz', 'wb') as f:109    f.write(content)110```111112Пример сжатия существующего файла в формате GZIP:113114```python115import gzip116with open('/home/joe/file.txt', 'rb') as f_in:117    with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:118        f_out.writelines(f_in)119```120121Пример сжатия бинарной строки в формате GZIP:122123```python124import gzip125s_in = b"Lots of content here"126s_out = gzip.compress(s_in)127```128129> **См. также**130>131> **Модуль [`zlib`](https://python-all.ru/3.4/library/zlib.html#module-zlib)**132>133> Базовый модуль сжатия данных, необходимый для поддержки формата файлов134>135> **gzip**136>137> .138