bz2.md
1> **Источник:** https://python-all.ru/3.5/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.5/library/bz2.html#module-bz2) – Поддержка сжатия **bzip2**89**Исходный код:** [Lib/bz2.py](https://python-all.ru/src/3.5/Lib/bz2.py)1011---1213Этот модуль предоставляет полный интерфейс для сжатия и распаковки данных с использованием алгоритма сжатия bzip2.1415Модуль [`bz2`](https://python-all.ru/3.5/library/bz2.html#module-bz2) содержит:1617- Функция [`open()`](https://python-all.ru/3.5/library/bz2.html#bz2.open) и класс [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File) для чтения и записи сжатых файлов.18- Классы [`BZ2Compressor`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Compressor) и [`BZ2Decompressor`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor) для инкрементального сжатия и распаковки.19- Функции [`compress()`](https://python-all.ru/3.5/library/bz2.html#bz2.compress) и [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.decompress) для одноразового сжатия и распаковки.2021Все классы в этом модуле можно безопасно использовать из нескольких потоков.2223## 13.3.1. Сжатие и распаковка файлов2425#### `bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)`2627Открывает сжатый bzip2 файл в бинарном или текстовом режиме, возвращая [файловый объект](https://python-all.ru/3.5/glossary.html#term-file-object).2829Как и в случае с конструктором [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File), аргумент *filename* может быть фактическим именем файла (объектом [`str`](https://python-all.ru/3.5/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes)) или существующим файловым объектом для чтения или записи.3031Аргумент *mode* может быть любым из `'r'`, `'rb'`, `'w'`, `'wb'`, `'x'`, `'xb'`, `'a'` или `'ab'` для бинарного режима, или `'rt'`, `'wt'`, `'xt'` или `'at'` для текстового режима. По умолчанию `'rb'`.3233Аргумент *compresslevel* – целое число от 1 до 9, как и у конструктора [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File).3435В бинарном режиме эта функция эквивалентна конструктору [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File): `BZ2File(filename, mode, compresslevel=compresslevel)`. В этом случае аргументы *encoding*, *errors* и *newline* не должны передаваться.3637Для текстового режима создаётся объект [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File), обёрнутый в экземпляр [`io.TextIOWrapper`](https://python-all.ru/3.5/library/io.html#io.TextIOWrapper) с указанными кодировкой, поведением при ошибках и символами конца строки.3839Новое в версии 3.3.4041Изменено в версии 3.4: Добавлен режим `'x'` (эксклюзивное создание).4243#### `class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)`4445Открывает сжатый bzip2 файл в бинарном режиме.4647Если *filename* – объект [`str`](https://python-all.ru/3.5/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes), открыть указанный файл напрямую. В противном случае *filename* должен быть [файловым объектом](https://python-all.ru/3.5/glossary.html#term-file-object), который будет использоваться для чтения или записи сжатых данных.4849Аргумент *mode* может быть `'r'` для чтения (по умолчанию), `'w'` для перезаписи, `'x'` для исключительного создания или `'a'` для добавления. Им эквивалентно соответствуют `'rb'`, `'wb'`, `'xb'` и `'ab'` соответственно.5051Если *filename* – файловый объект (а не фактическое имя файла), режим `'w'` не усекает файл, а вместо этого эквивалентен `'a'`.5253Аргумент *buffering* игнорируется. Его использование устарело.5455Если *mode* равен `'w'` или `'a'`, то *compresslevel* может быть числом между `1` и `9`, задающим степень сжатия: `1` дает наименьшее сжатие, а `9` (по умолчанию) – наибольшее.5657Если *mode* – `'r'`, входной файл может быть объединением нескольких сжатых потоков.5859[`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File) предоставляет все члены, определённые в [`io.BufferedIOBase`](https://python-all.ru/3.5/library/io.html#io.BufferedIOBase), за исключением `detach()` и `truncate()`. Поддерживаются итерация и оператор [`with`](https://python-all.ru/3.5/reference/compound_stmts.html#with).6061[`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File) также предоставляет следующий метод:6263#### `peek([n])`6465Возвращает буферизованные данные без продвижения файловой позиции. Будет возвращён как минимум один байт данных (если не достигнут конец файла). Точное количество возвращаемых байт не указано.6667> **Примечание**68>69> Хотя вызов [`peek()`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File.peek) не меняет файловую позицию [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File), он может изменить позицию нижележащего файлового объекта (например, если [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File) был создан путём передачи файлового объекта в качестве *filename*).7071Новое в версии 3.3.7273Изменено в версии 3.1: Добавлена поддержка оператора [`with`](https://python-all.ru/3.5/reference/compound_stmts.html#with).7475Изменено в версии 3.3: добавлены методы `fileno()`, `readable()`, `seekable()`, `writable()`, `read1()` и `readinto()`.7677Изменено в версии 3.3: Добавлена поддержка передачи *filename* в качестве [файлового объекта](https://python-all.ru/3.5/glossary.html#term-file-object) вместо реального имени файла.7879Изменено в версии 3.3: добавлен режим `'a'` (дозапись), а также поддержка чтения многофайловых потоков.8081Изменено в версии 3.4: Добавлен режим `'x'` (эксклюзивное создание).8283Изменено в версии 3.5: Метод [`read()`](https://python-all.ru/3.5/library/io.html#io.BufferedIOBase.read) теперь принимает аргумент типа `None`.8485## 13.3.2. Инкрементальное сжатие и распаковка8687#### `class bz2.BZ2Compressor(compresslevel=9)`8889Создаёт новый объект компрессора. Этот объект можно использовать для инкрементального сжатия данных. Для однократного сжатия используйте функцию [`compress()`](https://python-all.ru/3.5/library/bz2.html#bz2.compress).9091*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.9293#### `compress(data)`9495Передаёт данные объекту компрессора. Возвращает сжатый фрагмент данных, если возможно, или пустую байтовую строку в противном случае.9697После завершения передачи данных компрессору следует вызвать метод [`flush()`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Compressor.flush) для завершения процесса сжатия.9899#### `flush()`100101Завершает процесс сжатия. Возвращает сжатые данные, оставшиеся во внутренних буферах.102103Объект компрессора нельзя использовать после вызова этого метода.104105#### `class bz2.BZ2Decompressor`106107Создаёт новый объект декомпрессора. Этот объект можно использовать для инкрементальной декомпрессии данных. Для одноразового сжатия используйте функцию [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.decompress) вместо этого.108109> **Примечание**110>111> Этот класс не обрабатывает прозрачно входные данные, содержащие несколько сжатых потоков, в отличие от [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.decompress) и [`BZ2File`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2File). Если необходимо декомпрессировать многопоточный вход с помощью [`BZ2Decompressor`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor), нужно использовать новый декомпрессор для каждого потока.112113#### `decompress(data, max_length=-1)`114115Декомпрессирует *data* ([байтоподобный объект](https://python-all.ru/3.5/glossary.html#term-bytes-like-object)), возвращая несжатые данные в виде байтов. Часть *data* может буферизироваться внутренне для использования в последующих вызовах [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.decompress). Возвращаемые данные следует объединять с результатом любых предыдущих вызовов [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.decompress).116117Если *max\_length* неотрицательно, возвращает не более *max\_length* байтов декомпрессированных данных. Если этот лимит достигнут и может быть сгенерирован дальнейший вывод, атрибут [`needs_input`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.needs_input) будет установлен в `False`. В этом случае следующий вызов [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.decompress) может передать *data* как `b''` для получения ещё вывода.118119Если все входные данные были декомпрессированы и возвращены (либо потому что это было меньше *max\_length* байтов, либо потому что *max\_length* было отрицательным), атрибут [`needs_input`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.needs_input) будет установлен в `True`.120121Попытка распаковать данные после достижения конца потока вызывает исключение *EOFError*. Любые данные, обнаруженные после конца потока, игнорируются и сохраняются в атрибуте [`unused_data`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.unused_data).122123Изменено в версии 3.5: Добавлен параметр *max\_length*.124125#### `eof`126127`True`, если достигнут маркер конца потока.128129Новое в версии 3.3.130131#### `unused_data`132133Данные, обнаруженные после конца сжатого потока.134135Если к этому атрибуту обратиться до достижения конца потока, его значение будет `b''`.136137#### `needs_input`138139`False`, если метод [`decompress()`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor.decompress) может предоставить больше декомпрессированных данных до запроса нового несжатого входа.140141Новое в версии 3.5.142143## 13.3.3. Одношаговое сжатие и распаковка144145#### `bz2.compress(data, compresslevel=9)`146147Сжать *data*.148149*compresslevel*, если указан, должен быть числом от `1` до `9`. По умолчанию `9`.150151Для инкрементального сжатия используйте [`BZ2Compressor`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Compressor).152153#### `bz2.decompress(data)`154155Распаковать *data*.156157Если *data* является объединением нескольких сжатых потоков, декомпрессирует все потоки.158159Для инкрементальной декомпрессии используйте [`BZ2Decompressor`](https://python-all.ru/3.5/library/bz2.html#bz2.BZ2Decompressor).160161Изменено в версии 3.3: Добавлена поддержка многопоточных входных данных.162