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

12.3. bz2 – Сжатие, совместимое с bzip2bz2 – Compression compatible with bzip2

Новое в версии 2.3.

Этот модуль предоставляет комплексный интерфейс для библиотеки сжатия bz2. Он реализует полный файловый интерфейс, функции одноразового сжатия/распаковки и типы для последовательного сжатия/распаковки.

Ниже приведена сводка возможностей модуля bz2:

  • Класс BZ2File реализует полный файловый интерфейс, включая readline(), readlines(), writelines(), seek() и т.д.;

  • Класс BZ2File реализует эмулированную поддержку seek();

  • Класс BZ2File реализует поддержку универсальных символов новой строки;

  • Класс BZ2File предлагает оптимизированную итерацию по строкам с использованием алгоритма упреждающего чтения, заимствованного из файловых объектов;

  • Последовательное сжатие и декомпрессия поддерживаются классами BZ2Compressor и BZ2Decompressor;

  • Одноэтапное сжатие и декомпрессия поддерживаются функциями compress() и decompress() ;

  • Потокобезопасность использует индивидуальный механизм блокировки.

Примечание

Обработка многопотоковых bzip2 файлов не поддерживается. Такие модули, как bz2file, позволяют обойти это ограничение.

12.3.1. (Де)компрессия файлов(De)compression of files

Обработка сжатых файлов предоставляется классом BZ2File.

class bz2.BZ2File(filename[, mode[, buffering[, compresslevel]]])

Открывает bz2 файл. Режим может быть 'r' или 'w', для чтения (по умолчанию) или записи. При открытии на запись файл будет создан, если он не существует, и урезан в противном случае. Если задан buffering, значение 0 означает отсутствие буферизации, а большие числа задают размер буфера; по умолчанию – 0. Если задан compresslevel, он должен быть числом от 1 до 9; по умолчанию – 9. Добавьте 'U' к режиму, чтобы открыть файл для ввода в режиме универсальных символов новой строки. Любой конец строки во входном файле будет восприниматься как '\n' в Python. Кроме того, файл, открытый таким образом, получает атрибут newlines; значение этого атрибута – одно из None (новая строка ещё не прочитана), '\r', '\n', '\r\n' или кортеж, содержащий все встреченные типы новых строк. Универсальные новые строки доступны только при чтении. Экземпляры поддерживают итерацию так же, как и обычные экземпляры file.

BZ2File поддерживает оператор with.

Изменено в версии 2.7: Добавлена поддержка оператора with.

Примечание

Этот класс не поддерживает входные файлы, содержащие несколько потоков (например, созданные инструментом pbzip2). При чтении такого файла будет доступен только первый поток. Если требуется поддержка многопотоковых файлов, рассмотрите возможность использования стороннего модуля bz2file (доступен на PyPI). Этот модуль предоставляет обратно портированную версию класса BZ2File из Python 3.3, который поддерживает многопотоковые файлы.

close()

Закрывает файл. Устанавливает атрибут данных closed в true. Закрытый файл нельзя использовать для дальнейших операций ввода-вывода. close() может вызываться более одного раза без ошибки.

read([size])

Читает не более size несжатых байт, возвращаемых в виде строки. Если аргумент size отрицательный или опущен, читает до достижения EOF.

readline([size])

Возвращает следующую строку из файла в виде строки, сохраняя символ новой строки. Неотрицательный аргумент size ограничивает максимальное количество возвращаемых байт (при этом может быть возвращена неполная строка). Возвращает пустую строку при EOF.

readlines([size])

Возвращает список прочитанных строк. Необязательный аргумент size, если задан, является приблизительной границей общего количества байт в возвращаемых строках.

xreadlines()

Для обратной совместимости. Объекты BZ2File теперь включают оптимизации производительности, ранее реализованные в модуле xreadlines.

Устарело с версии 2.3: Существует только для совместимости с методом с таким же именем у объектов file, который устарел. Вместо этого используйте for line in file.

seek(offset[, whence])

Переместиться на новую позицию в файле. Аргумент offset – это количество байтов. Необязательный аргумент whence по умолчанию равен os.SEEK_SET или 0 (смещение от начала файла; offset должен быть >= 0); другие значения: os.SEEK_CUR или 1 (перемещение относительно текущей позиции; offset может быть положительным или отрицательным), и os.SEEK_END или 2 (перемещение относительно конца файла; offset обычно отрицателен, хотя многие платформы допускают позиционирование за конец файла).

Обратите внимание, что перемещение в bz2-файлах эмулируется, и в зависимости от параметров операция может быть крайне медленной.

tell()

Возвращает текущую позицию в файле, целое число (может быть длинным целым).

write(data)

Записывает строку data в файл. Обратите внимание, что из-за буферизации может потребоваться close(), прежде чем данные отобразятся в файле на диске.

writelines(sequence_of_strings)

Записывает последовательность строк в файл. Обратите внимание, что символы новой строки не добавляются. Последовательность может быть любым итерируемым объектом, порождающим строки. Это эквивалентно вызову write() для каждой строки.

12.3.2. Последовательное сжатие и декомпрессияSequential (de)compression

Последовательное сжатие и декомпрессия выполняются с использованием классов BZ2Compressor и BZ2Decompressor.

class bz2.BZ2Compressor([compresslevel])

Создаёт новый объект компрессора. Этот объект может использоваться для последовательного сжатия данных. Если требуется сжать данные за один раз, используйте вместо этого функцию compress(). Параметр compresslevel, если задан, должен быть числом от 1 до 9; по умолчанию – 9.

compress(data)

В объект компрессора передаются дополнительные данные. Он возвращает фрагменты сжатых данных по мере возможности. После завершения подачи данных для сжатия вызывается метод flush() для завершения процесса сжатия и возврата остатка данных из внутренних буферов.

flush()

Завершает процесс сжатия и возвращает то, что осталось во внутренних буферах. После вызова этого метода нельзя использовать объект компрессора.

class bz2.BZ2Decompressor

Создаёт новый объект декомпрессора. Этот объект предназначен для последовательной декомпрессии данных. Если требуется декомпрессировать данные за один раз, вместо этого используется функция decompress().

decompress(data)

В объект декомпрессора передаются дополнительные данные. Он возвращает фрагменты распакованных данных по мере возможности. Если попытаться декомпрессировать данные после обнаружения конца потока, будет вызвано исключение EOFError. Если после конца потока обнаружены какие-либо данные, они игнорируются и сохраняются в атрибуте unused_data.

12.3.3. Одноразовая (де)компрессияOne-shot (de)compression

Сжатие и декомпрессия за один раз реализованы через функции compress() и decompress().

bz2.compress(data[, compresslevel])

Сжимает data за один раз. Для последовательного сжатия данных вместо этого используется экземпляр BZ2Compressor. Параметр compresslevel, если задан, должен быть числом от 1 до 9; значение по умолчанию – 9.

bz2.decompress(data)

Распаковывает data за один раз. Для последовательной декомпрессии данных вместо этого используется экземпляр BZ2Decompressor.