import bz2 bz2.BZ2Compressor(compresslevel=9)
compresslevel=9
- уровень сжатия.Функция BZ2Compressor()
модуля bz2
создает новый объект компрессора Compressor
. Этот объект может использоваться для сжатия данных частями.
Уровень сжатия compresslevel
, если он задан, должен быть целым числом от 1 до 9. По умолчанию уровень сжатия 9.
Для сжатия алгоритмом bz2 за один раз используйте функцию bz2.compress()
.
bz2.BZ2Compressor
.Compressor.compress(data)
:Метод Compressor.compress()
принимает данные data
для объекта компрессора. Возвращает кусок сжатых данных, если это возможно или в противном случае пустую строку байтов.
Когда данные закончатся, то необходимо вызвать метод Compressor.flush()
, чтобы завершить процесс сжатия.
Compressor.flush()
:Метод Compressor.flush()
завершает процесс сжатия и возвращает сжатые данные, оставленные во внутренних буферах.
Объект компрессора Compressor
нельзя использовать после вызова этого метода.
import bz2, os # создадим файл txt_file = 'lorem.txt' txt = 'Lorem ipsum. ' with open(txt_file, 'w') as fp: for _ in range(10): fp.write(txt*50 + '\n\n') # создадим компрессор compressor = bz2.BZ2Compressor() # файл для сжатых данных bz2_file = 'lorem.bz2' # откроем файл lorem.txt в бинарном режиме как # `rb` и будем читать и сжимать частями. with open(txt_file, 'rb') as fpr, open(bz2_file, 'wb') as fpw: while True: # читаем файл частями по 500 байт block = fpr.read(500) if block: data = compressor.compress(block) if data: fpw.write(data) else: break # данные кончились, запишем остатки # данных из буфера в файл 'lorem.bz2' fpw.write(compressor.flush()) # смотрим что получилось >>> os.system(f'file {bz2_file}') # lorem.bz2: bzip2 compressed data, block size = 900k # смотрим объем файлов в байтах >>> os.path.getsize(txt_file) # 6520 >>> os.path.getsize(bz2_file) # 80