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

bz2.md

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

1> **Источник:** https://python-all.ru/3.4/library/bz2.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 13.3. [`bz2`](https://python-all.ru/3.4/library/bz2.html#module-bz2) – Поддержка сжатия **bzip2**89Этот модуль предоставляет полный интерфейс для сжатия и распаковки данных с использованием алгоритма сжатия bzip2.1011Модуль [`bz2`](https://python-all.ru/3.4/library/bz2.html#module-bz2) содержит:1213- Функция [`open()`](https://python-all.ru/3.4/library/bz2.html#bz2.open) и класс [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File) для чтения и записи сжатых файлов.14- Классы [`BZ2Compressor`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Compressor) и [`BZ2Decompressor`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Decompressor) для инкрементального (де)сжатия.15- Функции [`compress()`](https://python-all.ru/3.4/library/bz2.html#bz2.compress) и [`decompress()`](https://python-all.ru/3.4/library/bz2.html#bz2.decompress) для одноразового (де)сжатия.1617Все классы в этом модуле можно безопасно использовать из нескольких потоков.1819## 13.3.1. Сжатие и распаковка файлов2021#### `bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)`2223Открывает сжатый bzip2 файл в бинарном или текстовом режиме, возвращая [*файловый объект*](https://python-all.ru/3.4/glossary.html#term-file-object).2425Как и в конструкторе [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File), аргумент *filename* может быть фактическим именем файла (объект [`str`](https://python-all.ru/3.4/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes)) или существующим файловым объектом для чтения или записи.2627Аргумент *mode* может быть любым из `'r'`, `'rb'`, `'w'`, `'wb'`, `'x'`, `'xb'`, `'a'` или `'ab'` для двоичного режима, или `'rt'`, `'wt'`, `'xt'`, или `'at'` для текстового режима. По умолчанию `'rb'`.2829Аргумент *compresslevel* – это целое число от 1 до 9, как и в конструкторе [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File).3031Для двоичного режима эта функция эквивалентна конструктору [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File): `BZ2File(filename, mode, compresslevel=compresslevel)`. В этом случае аргументы *encoding*, *errors* и *newline* указывать не следует.3233Для текстового режима создаётся объект [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File), который оборачивается в экземпляр [`io.TextIOWrapper`](https://python-all.ru/3.4/library/io.html#io.TextIOWrapper) с заданными кодировкой, режимом обработки ошибок и символами конца строки.3435Новое в версии 3.3.3637Изменено в версии 3.4: Добавлен режим `'x'` (исключительное создание).3839#### `class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)`4041Открывает сжатый bzip2 файл в бинарном режиме.4243Если *filename* является объектом [`str`](https://python-all.ru/3.4/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes), то файл открывается напрямую. В противном случае *filename* должен быть [*файловым объектом*](https://python-all.ru/3.4/glossary.html#term-file-object), который будет использоваться для чтения или записи сжатых данных.4445Аргумент *mode* может быть `'r'` для чтения (по умолчанию), `'w'` для перезаписи, `'x'` для исключительного создания или `'a'` для добавления. Их можно эквивалентно задавать как `'rb'`, `'wb'`, `'xb'` и `'ab'` соответственно.4647Если *filename* является файловым объектом (а не фактическим именем файла), то режим `'w'` не усекает файл, а эквивалентен `'a'`.4849Аргумент *buffering* игнорируется. Его использование устарело.5051Если *mode* равен `'w'` или `'a'`, то *compresslevel* может быть числом от `1` до `9`, задающим уровень сжатия: `1` даёт наименьшее сжатие, а `9` (по умолчанию) – наибольшее.5253Если *mode* равен `'r'`, входной файл может быть конкатенацией нескольких сжатых потоков.5455[`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File) предоставляет все члены, определённые в [`io.BufferedIOBase`](https://python-all.ru/3.4/library/io.html#io.BufferedIOBase), за исключением `detach()` и `truncate()`. Поддерживаются итерация и оператор [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with).5657[`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File) также предоставляет следующий метод:5859#### `peek([n])`6061Возвращает буферизованные данные без продвижения файловой позиции. Будет возвращён как минимум один байт данных (если не достигнут конец файла). Точное количество возвращаемых байт не указано.6263> **Примечание**64>65> Хотя вызов [`peek()`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File.peek) не изменяет позицию файла в [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File), он может изменить позицию нижележащего файлового объекта (например, если [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File) был создан путём передачи файлового объекта в *filename*).6667Новое в версии 3.3.6869Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with).7071Изменено в версии 3.3: Добавлены методы `fileno()`, `readable()`, `seekable()`, `writable()`, `read1()` и `readinto()`.7273Изменено в версии 3.3: Добавлена поддержка передачи *filename* в качестве [*файлового объекта*](https://python-all.ru/3.4/glossary.html#term-file-object) вместо реального имени файла.7475Изменено в версии 3.3: Добавлен режим `'a'` (добавление), а также поддержка чтения многопотоковых файлов.7677Изменено в версии 3.4: Добавлен режим `'x'` (исключительное создание).7879## 13.3.2. Инкрементальное сжатие и распаковка8081#### `class bz2.BZ2Compressor(compresslevel=9)`8283Создаёт новый объект компрессора. Этот объект можно использовать для инкрементального сжатия данных. Для одноразового сжатия используйте функцию [`compress()`](https://python-all.ru/3.4/library/bz2.html#bz2.compress).8485*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.8687#### `compress(data)`8889Передаёт данные объекту компрессора. Возвращает сжатый фрагмент данных, если возможно, или пустую байтовую строку в противном случае.9091После того как все данные переданы компрессору, вызовите метод [`flush()`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Compressor.flush) для завершения процесса сжатия.9293#### `flush()`9495Завершает процесс сжатия. Возвращает сжатые данные, оставшиеся во внутренних буферах.9697Объект компрессора нельзя использовать после вызова этого метода.9899#### `class bz2.BZ2Decompressor`100101Создаёт новый объект декомпрессора. Этот объект можно использовать для инкрементальной распаковки данных. Для однократной компрессии используйте функцию [`decompress()`](https://python-all.ru/3.4/library/bz2.html#bz2.decompress) вместо.102103> **Примечание**104>105> Этот класс не обрабатывает прозрачно входные данные, содержащие несколько сжатых потоков, в отличие от [`decompress()`](https://python-all.ru/3.4/library/bz2.html#bz2.decompress) и [`BZ2File`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2File). Если нужно распаковать многопоточный вход с помощью [`BZ2Decompressor`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Decompressor), для каждого потока необходимо использовать новый декомпрессор.106107#### `decompress(data)`108109Передаёт данные объекту декомпрессора. Возвращает фрагмент распакованных данных, если это возможно, или пустую байтовую строку в противном случае.110111Попытка распаковать данные после достижения конца текущего потока вызывает исключение [`EOFError`](https://python-all.ru/3.4/library/exceptions.html#EOFError). Если после конца потока обнаружены какие-либо данные, они игнорируются и сохраняются в атрибуте [`unused_data`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Decompressor.unused_data).112113#### `eof`114115`True`, если достигнут маркер конца потока.116117Новое в версии 3.3.118119#### `unused_data`120121Данные, обнаруженные после конца сжатого потока.122123Если этот атрибут запрашивается до достижения конца потока, его значением будет `b''`.124125## 13.3.3. Одношаговое сжатие и распаковка126127#### `bz2.compress(data, compresslevel=9)`128129Сжать *data*.130131*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.132133Для инкрементальной компрессии используйте [`BZ2Compressor`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Compressor).134135#### `bz2.decompress(data)`136137Распаковать *data*.138139Если *data* является объединением нескольких сжатых потоков, декомпрессирует все потоки.140141Для инкрементальной распаковки используйте [`BZ2Decompressor`](https://python-all.ru/3.4/library/bz2.html#bz2.BZ2Decompressor).142143Изменено в версии 3.3: Добавлена поддержка многопоточных входных данных.144