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

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

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

Другие форматы архивов описаны в модулях gzip, zipfile и tarfile.

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

  • BZ2File реализует полный файловый интерфейс, включая readline(), readlines(), writelines(), seek() и т.д.;
  • BZ2File реализует эмулированную поддержку seek();
  • BZ2File class implements universal newline support;
  • BZ2File предлагает оптимизированную итерацию по строкам с использованием алгоритма упреждающего чтения;
  • Sequential (de)compression supported by BZ2Compressor and BZ2Decompressor classes;
  • One-shot (de)compression supported by compress() and decompress() functions;
  • Потокобезопасность использует индивидуальный механизм блокировки.

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

Handling of compressed files is offered by the BZ2File class.

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

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

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

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

close()
Закрывает файл. Устанавливает атрибут данных closed в true. Закрытый файл нельзя использовать для дальнейших операций ввода-вывода. close() может быть вызван несколько раз без ошибки.
read([size])
Читает не более size несжатых байт, возвращаемых в виде байтовой строки. Если аргумент size отрицательный или опущен, читает до достижения EOF.
readline([size])
Возвращает следующую строку из файла в виде байтовой строки, сохраняя символ новой строки. Неотрицательный аргумент size ограничивает максимальное количество возвращаемых байт (в этом случае может быть возвращена неполная строка). По достижении EOF возвращает пустую байтовую строку.
readlines([size])
Возвращает список прочитанных строк. Необязательный аргумент size, если задан, является приблизительной границей общего количества байт в возвращаемых строках.
seek(offset[, whence])

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

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

tell()
Возвращает текущую позицию в файле (целое число).
write(data)
Записывает байтовую строку data в файл. Из-за буферизации может потребоваться вызов close(), прежде чем данные отобразятся в файле на диске.
writelines(sequence_of_byte_strings)
Записывает последовательность байтовых строк в файл. Символы новой строки не добавляются. Последовательностью может быть любой итерируемый объект, возвращающий байтовые строки. Это эквивалентно вызову write() для каждой байтовой строки.

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

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

class bz2.BZ2Compressor(compresslevel=9)

Создаёт новый объект компрессора. Этот объект можно использовать для последовательного сжатия данных. Если необходимо сжать данные за один раз, используйте функцию 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=9)
Сжимает data за один раз. Если требуется последовательное сжатие данных, используйте экземпляр BZ2Compressor. Параметр compresslevel, если указан, должен быть числом от 1 до 9; по умолчанию 9.
bz2.decompress(data)
Распаковывает data за один раз. Если требуется последовательная распаковка данных, используйте экземпляр BZ2Decompressor.