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

13.3. bz2 – Поддержка сжатия bzip2bz2 – Support for bzip2 compression

Этот модуль предоставляет полный интерфейс для сжатия и распаковки данных с использованием алгоритма сжатия bzip2.

Модуль bz2 содержит:

Все классы в этом модуле можно безопасно использовать из нескольких потоков.

13.3.1. Сжатие и распаковка файлов(De)compression of files

bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)

Открывает сжатый bzip2 файл в бинарном или текстовом режиме, возвращая файловый объект.

Как и в конструкторе BZ2File, аргумент filename может быть фактическим именем файла (объект str или bytes) или существующим файловым объектом для чтения или записи.

Аргумент mode может быть любым из значений 'r', 'rb', 'w', 'wb', 'a' или 'ab' для двоичного режима, или 'rt', 'wt' или 'at' для текстового режима. По умолчанию – 'rb'.

Аргумент compresslevel – это целое число от 1 до 9, как и в конструкторе BZ2File.

Для двоичного режима эта функция эквивалентна конструктору BZ2File: BZ2File(filename, mode, compresslevel=compresslevel). В этом случае аргументы encoding, errors и newline указывать не следует.

Для текстового режима создаётся объект BZ2File, который оборачивается в экземпляр io.TextIOWrapper с заданными кодировкой, режимом обработки ошибок и символами конца строки.

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

class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)

Открывает сжатый bzip2 файл в бинарном режиме.

Если filename является объектом str или bytes, то файл открывается напрямую. В противном случае filename должен быть файловым объектом, который будет использоваться для чтения или записи сжатых данных.

Аргумент mode может быть одним из 'r' для чтения (по умолчанию), 'w' для перезаписи или 'a' для добавления. Эти значения можно также задать как 'rb', 'wb' и 'ab' соответственно.

Если filename является файловым объектом (а не фактическим именем файла), то режим 'w' не усекает файл, а эквивалентен 'a'.

Аргумент buffering игнорируется. Его использование устарело.

Если mode равен 'w' или 'a', то compresslevel может быть числом от 1 до 9, задающим уровень сжатия: 1 даёт наименьшее сжатие, а 9 (по умолчанию) – наибольшее.

Если mode равен 'r', входной файл может быть конкатенацией нескольких сжатых потоков.

BZ2File предоставляет все члены, определённые в io.BufferedIOBase, за исключением detach() и truncate(). Поддерживаются итерация и оператор with.

BZ2File также предоставляет следующий метод:

peek([n])

Возвращает буферизованные данные без продвижения файловой позиции. Будет возвращён как минимум один байт данных (если не достигнут конец файла). Точное количество возвращаемых байт не указано.

Примечание

Хотя вызов peek() не изменяет позицию файла в BZ2File, он может изменить позицию нижележащего файлового объекта (например, если BZ2File был создан путём передачи файлового объекта в filename).

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

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

Изменено в версии 3.3: Добавлены методы fileno(), readable(), seekable(), writable(), read1() и readinto().

Изменено в версии 3.3: Добавлена поддержка передачи filename в качестве файлового объекта вместо реального имени файла.

Изменено в версии 3.3: Добавлен режим 'a' (добавление), а также поддержка чтения многопотоковых файлов.

13.3.2. Инкрементальное сжатие и распаковкаIncremental (de)compression

class bz2.BZ2Compressor(compresslevel=9)

Создаёт новый объект компрессора. Этот объект можно использовать для инкрементального сжатия данных. Для одноразового сжатия используйте функцию compress().

compresslevel, если указан, должен быть числом от 1 до 9. По умолчанию 9.

compress(data)

Передаёт данные объекту компрессора. Возвращает сжатый фрагмент данных, если возможно, или пустую байтовую строку в противном случае.

После того как все данные переданы компрессору, вызовите метод flush() для завершения процесса сжатия.

flush()

Завершает процесс сжатия. Возвращает сжатые данные, оставшиеся во внутренних буферах.

Объект компрессора нельзя использовать после вызова этого метода.

class bz2.BZ2Decompressor

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

Примечание

Этот класс не обрабатывает прозрачно входные данные, содержащие несколько сжатых потоков, в отличие от decompress() и BZ2File. Если нужно распаковать многопоточный вход с помощью BZ2Decompressor, для каждого потока необходимо использовать новый декомпрессор.

decompress(data)

Передаёт данные объекту декомпрессора. Возвращает фрагмент распакованных данных, если это возможно, или пустую байтовую строку в противном случае.

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

eof

True, если достигнут маркер конца потока.

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

unused_data

Данные, обнаруженные после конца сжатого потока.

Если этот атрибут запрашивается до достижения конца потока, его значением будет b''.

13.3.3. Одношаговое сжатие и распаковкаOne-shot (de)compression

bz2.compress(data, compresslevel=9)

Сжать data.

compresslevel, если указан, должен быть числом от 1 до 9. По умолчанию 9.

Для инкрементальной компрессии используйте BZ2Compressor.

bz2.decompress(data)

Распаковать data.

Если data является объединением нескольких сжатых потоков, декомпрессирует все потоки.

Для инкрементальной распаковки используйте BZ2Decompressor.

Изменено в версии 3.3: Добавлена поддержка многопоточных входных данных.