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

bz2.md

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

1> **Источник:** https://python-all.ru/2.7/library/bz2.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 12.3. [`bz2`](https://python-all.ru/2.7/library/bz2.html#module-bz2) – Сжатие, совместимое с **bzip2**89Новое в версии 2.3.1011Этот модуль предоставляет комплексный интерфейс для библиотеки сжатия bz2. Он реализует полный файловый интерфейс, функции одноразового сжатия/распаковки и типы для последовательного сжатия/распаковки.1213Ниже приведена сводка возможностей модуля bz2:1415- Класс [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) реализует полный файловый интерфейс, включая [`readline()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.readline), [`readlines()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.readlines), [`writelines()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.writelines), [`seek()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.seek) и т.д.;16- Класс [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) реализует эмулированную поддержку [`seek()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.seek);17- Класс [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) реализует поддержку универсальных символов новой строки;18- Класс [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) предлагает оптимизированную итерацию по строкам с использованием алгоритма упреждающего чтения, заимствованного из файловых объектов;19- Последовательное сжатие и декомпрессия поддерживаются классами [`BZ2Compressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Compressor) и [`BZ2Decompressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Decompressor);20- Одноэтапное сжатие и декомпрессия поддерживаются функциями [`compress()`](https://python-all.ru/2.7/library/bz2.html#bz2.compress) и [`decompress()`](https://python-all.ru/2.7/library/bz2.html#bz2.decompress) ;21- Потокобезопасность использует индивидуальный механизм блокировки.2223> **Примечание**24>25> Обработка многопотоковых bzip2 файлов не поддерживается. Такие модули, как [bz2file](https://python-all.ru/2.7/library/bz2.html), позволяют обойти это ограничение.2627## 12.3.1. (Де)компрессия файлов2829Обработка сжатых файлов предоставляется классом [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File).3031#### `class bz2.BZ2File(filename[, mode[, buffering[, compresslevel]]])`3233Открывает bz2 файл. Режим может быть `'r'` или `'w'`, для чтения (по умолчанию) или записи. При открытии на запись файл будет создан, если он не существует, и урезан в противном случае. Если задан *buffering*, значение `0` означает отсутствие буферизации, а большие числа задают размер буфера; по умолчанию – `0`. Если задан *compresslevel*, он должен быть числом от `1` до `9`; по умолчанию – `9`. Добавьте `'U'` к режиму, чтобы открыть файл для ввода в режиме [универсальных символов новой строки](https://python-all.ru/2.7/glossary.html#term-universal-newlines). Любой конец строки во входном файле будет восприниматься как `'\n'` в Python. Кроме того, файл, открытый таким образом, получает атрибут `newlines`; значение этого атрибута – одно из `None` (новая строка ещё не прочитана), `'\r'`, `'\n'`, `'\r\n'` или кортеж, содержащий все встреченные типы новых строк. Универсальные новые строки доступны только при чтении. Экземпляры поддерживают итерацию так же, как и обычные экземпляры [`file`](https://python-all.ru/2.7/library/functions.html#file).3435[`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) поддерживает оператор [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).3637Изменено в версии 2.7: Добавлена поддержка оператора [`with`](https://python-all.ru/2.7/reference/compound_stmts.html#with).3839> **Примечание**40>41> Этот класс не поддерживает входные файлы, содержащие несколько потоков (например, созданные инструментом **pbzip2**). При чтении такого файла будет доступен только первый поток. Если требуется поддержка многопотоковых файлов, рассмотрите возможность использования стороннего модуля `bz2file` (доступен на [PyPI](https://python-all.ru/2.7/library/bz2.html)). Этот модуль предоставляет обратно портированную версию класса [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) из Python 3.3, который поддерживает многопотоковые файлы.4243#### `close()`4445Закрывает файл. Устанавливает атрибут данных `closed` в true. Закрытый файл нельзя использовать для дальнейших операций ввода-вывода. [`close()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.close) может вызываться более одного раза без ошибки.4647#### `read([size])`4849Читает не более *size* несжатых байт, возвращаемых в виде строки. Если аргумент *size* отрицательный или опущен, читает до достижения EOF.5051#### `readline([size])`5253Возвращает следующую строку из файла в виде строки, сохраняя символ новой строки. Неотрицательный аргумент *size* ограничивает максимальное количество возвращаемых байт (при этом может быть возвращена неполная строка). Возвращает пустую строку при EOF.5455#### `readlines([size])`5657Возвращает список прочитанных строк. Необязательный аргумент *size*, если задан, является приблизительной границей общего количества байт в возвращаемых строках.5859#### `xreadlines()`6061Для обратной совместимости. Объекты [`BZ2File`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File) теперь включают оптимизации производительности, ранее реализованные в модуле `xreadlines`.6263Устарело с версии 2.3: Существует только для совместимости с методом с таким же именем у объектов [`file`](https://python-all.ru/2.7/library/functions.html#file), который устарел. Вместо этого используйте `for line in file`.6465#### `seek(offset[, whence])`6667Переместиться на новую позицию в файле. Аргумент *offset* – это количество байтов. Необязательный аргумент *whence* по умолчанию равен `os.SEEK_SET` или `0` (смещение от начала файла; offset должен быть `>= 0`); другие значения: `os.SEEK_CUR` или `1` (перемещение относительно текущей позиции; offset может быть положительным или отрицательным), и `os.SEEK_END` или `2` (перемещение относительно конца файла; offset обычно отрицателен, хотя многие платформы допускают позиционирование за конец файла).6869Обратите внимание, что перемещение в bz2-файлах эмулируется, и в зависимости от параметров операция может быть крайне медленной.7071#### `tell()`7273Возвращает текущую позицию в файле, целое число (может быть длинным целым).7475#### `write(data)`7677Записывает строку *data* в файл. Обратите внимание, что из-за буферизации может потребоваться [`close()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2File.close), прежде чем данные отобразятся в файле на диске.7879#### `writelines(sequence_of_strings)`8081Записывает последовательность строк в файл. Обратите внимание, что символы новой строки не добавляются. Последовательность может быть любым итерируемым объектом, порождающим строки. Это эквивалентно вызову write() для каждой строки.8283## 12.3.2. Последовательное сжатие и декомпрессия8485Последовательное сжатие и декомпрессия выполняются с использованием классов [`BZ2Compressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Compressor) и [`BZ2Decompressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Decompressor).8687#### `class bz2.BZ2Compressor([compresslevel])`8889Создаёт новый объект компрессора. Этот объект может использоваться для последовательного сжатия данных. Если требуется сжать данные за один раз, используйте вместо этого функцию [`compress()`](https://python-all.ru/2.7/library/bz2.html#bz2.compress). Параметр *compresslevel*, если задан, должен быть числом от `1` до `9`; по умолчанию – `9`.9091#### `compress(data)`9293В объект компрессора передаются дополнительные данные. Он возвращает фрагменты сжатых данных по мере возможности. После завершения подачи данных для сжатия вызывается метод [`flush()`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Compressor.flush) для завершения процесса сжатия и возврата остатка данных из внутренних буферов.9495#### `flush()`9697Завершает процесс сжатия и возвращает то, что осталось во внутренних буферах. После вызова этого метода нельзя использовать объект компрессора.9899#### `class bz2.BZ2Decompressor`100101Создаёт новый объект декомпрессора. Этот объект предназначен для последовательной декомпрессии данных. Если требуется декомпрессировать данные за один раз, вместо этого используется функция [`decompress()`](https://python-all.ru/2.7/library/bz2.html#bz2.decompress).102103#### `decompress(data)`104105В объект декомпрессора передаются дополнительные данные. Он возвращает фрагменты распакованных данных по мере возможности. Если попытаться декомпрессировать данные после обнаружения конца потока, будет вызвано исключение [`EOFError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.EOFError). Если после конца потока обнаружены какие-либо данные, они игнорируются и сохраняются в атрибуте `unused_data`.106107## 12.3.3. Одноразовая (де)компрессия108109Сжатие и декомпрессия за один раз реализованы через функции [`compress()`](https://python-all.ru/2.7/library/bz2.html#bz2.compress) и [`decompress()`](https://python-all.ru/2.7/library/bz2.html#bz2.decompress).110111#### `bz2.compress(data[, compresslevel])`112113Сжимает *data* за один раз. Для последовательного сжатия данных вместо этого используется экземпляр [`BZ2Compressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Compressor). Параметр *compresslevel*, если задан, должен быть числом от `1` до `9`; значение по умолчанию – `9`.114115#### `bz2.decompress(data)`116117Распаковывает *data* за один раз. Для последовательной декомпрессии данных вместо этого используется экземпляр [`BZ2Decompressor`](https://python-all.ru/2.7/library/bz2.html#bz2.BZ2Decompressor).118