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

bz2.md

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

1> **Источник:** https://python-all.ru/3.3/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.3/library/bz2.html#module-bz2) – Поддержка сжатия **bzip2**89Этот модуль предоставляет полный интерфейс для сжатия и распаковки данных с использованием алгоритма сжатия bzip2.1011Модуль [`bz2`](https://python-all.ru/3.3/library/bz2.html#module-bz2) содержит:1213- Функция [`open()`](https://python-all.ru/3.3/library/bz2.html#bz2.open) и класс [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File) для чтения и записи сжатых файлов.14- Классы [`BZ2Compressor`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Compressor) и [`BZ2Decompressor`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Decompressor) для инкрементального (де)сжатия.15- Функции [`compress()`](https://python-all.ru/3.3/library/bz2.html#bz2.compress) и [`decompress()`](https://python-all.ru/3.3/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.3/glossary.html#term-file-object).2425Как и в конструкторе [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File), аргумент *filename* может быть фактическим именем файла (объект [`str`](https://python-all.ru/3.3/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes)) или существующим файловым объектом для чтения или записи.2627Аргумент *mode* может быть любым из значений `'r'`, `'rb'`, `'w'`, `'wb'`, `'a'` или `'ab'` для двоичного режима, или `'rt'`, `'wt'` или `'at'` для текстового режима. По умолчанию – `'rb'`.2829Аргумент *compresslevel* – это целое число от 1 до 9, как и в конструкторе [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File).3031Для двоичного режима эта функция эквивалентна конструктору [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File): `BZ2File(filename, mode, compresslevel=compresslevel)`. В этом случае аргументы *encoding*, *errors* и *newline* указывать не следует.3233Для текстового режима создаётся объект [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File), который оборачивается в экземпляр [`io.TextIOWrapper`](https://python-all.ru/3.3/library/io.html#io.TextIOWrapper) с заданными кодировкой, режимом обработки ошибок и символами конца строки.3435Новое в версии 3.3.3637#### `class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)`3839Открывает сжатый bzip2 файл в бинарном режиме.4041Если *filename* является объектом [`str`](https://python-all.ru/3.3/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes), то файл открывается напрямую. В противном случае *filename* должен быть [*файловым объектом*](https://python-all.ru/3.3/glossary.html#term-file-object), который будет использоваться для чтения или записи сжатых данных.4243Аргумент *mode* может быть одним из `'r'` для чтения (по умолчанию), `'w'` для перезаписи или `'a'` для добавления. Эти значения можно также задать как `'rb'`, `'wb'` и `'ab'` соответственно.4445Если *filename* является файловым объектом (а не фактическим именем файла), то режим `'w'` не усекает файл, а эквивалентен `'a'`.4647Аргумент *buffering* игнорируется. Его использование устарело.4849Если *mode* равен `'w'` или `'a'`, то *compresslevel* может быть числом от `1` до `9`, задающим уровень сжатия: `1` даёт наименьшее сжатие, а `9` (по умолчанию) – наибольшее.5051Если *mode* равен `'r'`, входной файл может быть конкатенацией нескольких сжатых потоков.5253[`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File) предоставляет все члены, определённые в [`io.BufferedIOBase`](https://python-all.ru/3.3/library/io.html#io.BufferedIOBase), за исключением `detach()` и `truncate()`. Поддерживаются итерация и оператор [`with`](https://python-all.ru/3.3/reference/compound_stmts.html#with).5455[`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File) также предоставляет следующий метод:5657#### `peek([n])`5859Возвращает буферизованные данные без продвижения файловой позиции. Будет возвращён как минимум один байт данных (если не достигнут конец файла). Точное количество возвращаемых байт не указано.6061> **Примечание**62>63> Хотя вызов [`peek()`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File.peek) не изменяет позицию файла в [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File), он может изменить позицию нижележащего файлового объекта (например, если [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File) был создан путём передачи файлового объекта в *filename*).6465Новое в версии 3.3.6667Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.3/reference/compound_stmts.html#with).6869Изменено в версии 3.3: Добавлены методы `fileno()`, `readable()`, `seekable()`, `writable()`, `read1()` и `readinto()`.7071Изменено в версии 3.3: Добавлена поддержка передачи *filename* в качестве [*файлового объекта*](https://python-all.ru/3.3/glossary.html#term-file-object) вместо реального имени файла.7273Изменено в версии 3.3: Добавлен режим `'a'` (добавление), а также поддержка чтения многопотоковых файлов.7475## 13.3.2. Инкрементальное сжатие и распаковка7677#### `class bz2.BZ2Compressor(compresslevel=9)`7879Создаёт новый объект компрессора. Этот объект можно использовать для инкрементального сжатия данных. Для одноразового сжатия используйте функцию [`compress()`](https://python-all.ru/3.3/library/bz2.html#bz2.compress).8081*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.8283#### `compress(data)`8485Передаёт данные объекту компрессора. Возвращает сжатый фрагмент данных, если возможно, или пустую байтовую строку в противном случае.8687После того как все данные переданы компрессору, вызовите метод [`flush()`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Compressor.flush) для завершения процесса сжатия.8889#### `flush()`9091Завершает процесс сжатия. Возвращает сжатые данные, оставшиеся во внутренних буферах.9293Объект компрессора нельзя использовать после вызова этого метода.9495#### `class bz2.BZ2Decompressor`9697Создаёт новый объект декомпрессора. Этот объект можно использовать для инкрементальной распаковки данных. Для однократной компрессии используйте функцию [`decompress()`](https://python-all.ru/3.3/library/bz2.html#bz2.decompress) вместо.9899> **Примечание**100>101> Этот класс не обрабатывает прозрачно входные данные, содержащие несколько сжатых потоков, в отличие от [`decompress()`](https://python-all.ru/3.3/library/bz2.html#bz2.decompress) и [`BZ2File`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2File). Если нужно распаковать многопоточный вход с помощью [`BZ2Decompressor`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Decompressor), для каждого потока необходимо использовать новый декомпрессор.102103#### `decompress(data)`104105Передаёт данные объекту декомпрессора. Возвращает фрагмент распакованных данных, если это возможно, или пустую байтовую строку в противном случае.106107Попытка распаковать данные после достижения конца текущего потока вызывает исключение [`EOFError`](https://python-all.ru/3.3/library/exceptions.html#EOFError). Если после конца потока обнаружены какие-либо данные, они игнорируются и сохраняются в атрибуте [`unused_data`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Decompressor.unused_data).108109#### `eof`110111`True`, если достигнут маркер конца потока.112113Новое в версии 3.3.114115#### `unused_data`116117Данные, обнаруженные после конца сжатого потока.118119Если этот атрибут запрашивается до достижения конца потока, его значением будет `b''`.120121## 13.3.3. Одношаговое сжатие и распаковка122123#### `bz2.compress(data, compresslevel=9)`124125Сжать *data*.126127*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.128129Для инкрементальной компрессии используйте [`BZ2Compressor`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Compressor).130131#### `bz2.decompress(data)`132133Распаковать *data*.134135Если *data* является объединением нескольких сжатых потоков, декомпрессирует все потоки.136137Для инкрементальной распаковки используйте [`BZ2Decompressor`](https://python-all.ru/3.3/library/bz2.html#bz2.BZ2Decompressor).138139Изменено в версии 3.3: Добавлена поддержка многопоточных входных данных.140