第八章:数据压缩与归档-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()方法会强制压缩器结束最后一个数据块,并返回余下的压缩数据。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值