第八章:数据压缩与归档-bz2:bzip2压缩-增量压缩和解压缩

8.3.2 增量压缩和解压缩
内存中的压缩方法存在明显的缺点,对于实际用例并不实用。另一种方法是使用BZ2Compressor和BZ2Decompressor对象以增量方式处理数据,从而不必将整个数据集都放在内存中。

import bz2
import binascii
import io

compressor = bz2.BZ2Compressor()

with open('lorem.txt','rb') as input:
    while True:
        block = input.read(64)
        if not block:
            break
        compressed = compressor.compress(block)
        if compressed:
            print('Compressed:{}'.format(
                binascii.hexlify(compressed)))
        else:
            print('buffering...')

    remaining = compressor.flush()
    print('Flushed:{}'.format(binascii.hexlify(remaining)))

这个例子从一个纯文本文件读取小数据块,并将它传至compress()。压缩器维护压缩数据的一个内部缓冲区。由于压缩算法取决于校验和以及最小块大小,所以压缩器每次接收更多输入时可能并没有准备好返回数据。如果它没有准备好一个完整的压缩块,则会返回一个空串。所有数据都已经输入时,flush()方法会强制压缩器结束最后一个数据块,并返回余下的压缩数据。
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/89217637
今日推荐