Сообщить об ошибке.

Класс BZ2Decompressor() модуля bz2 в Python

Извлечение сжатых bz2 данных частями

Синтаксис:

import bz2

bz2.BZ2Decompressor()

Параметры:

  • нет.

Возвращаемое значение:

Описание:

Функция BZ2Decompressor() модуля bz2 создает новый объект декомпрессора Decompressor. Этот объект может использоваться для распаковки данных частями.

Для извлечения сжатых данных алгоритмом bz2 за один раз используйте функцию bz2.decompress().

Метод и атрибуты экземпляра bz2.BZ2Decompressor.

Decompressor.decompress(data, max_length=-1):

Метод Decompressor.decompress() распаковывает поток данных в виде байтов, возвращая несжатые данные в байтах.

Некоторые данные могут быть буферизованы внутри, для использования в последующих вызовах bz2.decompress(). Возвращенные данные должны быть объединены с выходными данными любых предыдущих вызовов bz2.decompress().

Если аргумент max_length неотрицательный, то возвращает не более max_length байтов распакованных данных. Если этот предел достигнут и может быть получен дальнейший вывод, то для атрибута Decompressor.needs_input будет установлено значение False. В этом случае следующий вызов Decompressor.decompress() может предоставить данные как b'', чтобы получить больше выходных данных.

Если все входные данные были распакованы, но данные продолжают поступать из за того, что передавалось меньше чем max_length байт или потому что max_length был отрицательным, то атрибут Decompressor.needs_input будет иметь значение True.

Пытаясь распаковать данные после достижения конца потока, метод поднимает исключение EOFError. Любые данные, обнаруженные после конца потока игнорируется и сохраняется в атрибуте Decompressor.unused_data`.

Decompressor.eof:

Атрибут Decompressor.eof возвращает True, если достигнут маркер конца потока.

Decompressor.unused_data:

Атрибут Decompressor.unused_data возвращает данные, найденные после окончания сжатого потока. До достижения конца потока возвращаемое значение будет b''.

Decompressor.needs_input:

Метод Decompressor.needs_input возвращает False, если метод Decompressor.decompress() может предоставить больше распакованных данных, прежде чем потребуется новый несжатый ввод.


Пример распаковки потока сжатых данных bz2.

Распакуем поток сжатых данных, который получим при чтении файла lorem.bz2, созданного в примере bz2.BZ2Compressor.

import bz2, os

# файл сжатых данных
bz2_file = 'lorem.bz2'
# файл для распакованных данными
txt_file = 'unpack-lorem.txt'

# создадим декомпрессор
decompressor = bz2.BZ2Decompressor()

# открываем файлы на чтение 'lorem.bz2' 
# и запись 'unpack-lorem.txt' - оба в бинарных
# режимах. Распакованные данные `data`
# будем частями сразу писать в файл.
with open(bz2_file, 'rb') as fpr, open(txt_file, 'wb') as fpw:
    while True:
        # читаем по 30 байт
        block = fpr.read(30)
        if block:
            # распаковываем
            data = decompressor.decompress(block)
            # пишем
            fpw.write(data)
        else:
            break

# смотрим что получилось
>>> os.system(f'file {txt_file}')
# unpack-lorem.txt: ASCII text, with very long lines