bzip2是用于文件压缩和解压缩的开源算法。Python的bz2模块提供了以编程方式实现bzip2算法的功能。
该open()
方法是此模块的主要接口。
此函数将打开一个bzip2压缩文件并返回一个文件对象。可以以二进制/文本模式打开文件,并具有读/写权限。该函数基于1到9之间的compressionlevel参数执行压缩。
以“ w”或“ wb”模式打开文件时,此功能可用于文件对象。在二进制模式下,它将压缩的二进制数据写入文件。在普通文本模式下,文件对象包装在TetIOWrapper对象中以执行编码。
read() -在读取模式下打开时,此函数读取它并返回未压缩的数据。
以下代码将压缩后的数据写入bzip2文件。
>>> f = bz2.open("test.bz2", "wb") >>> data = b'Welcome to nhooo' >>> f.write(data) >>> f.close()
这将在当前目录中创建test.bz2文件。任何解压缩工具都将在其中显示“测试”文件。要从此test.bz2文件读取未压缩的数据,请使用以下代码。
>>> f = bz2.open("test.bz2", "rb") >>> data=f.read() >>> data b'Welcome to nhooo'
bz2模块还定义了BZ2File类。根据构造函数的模式参数,其对象充当压缩器和解压缩器。
这是构造函数。与open()
方法一样,文件和模式参数也是必需的。压缩级别默认为9,可以在1到9之间。
此函数返回增量压缩器类的对象。compress()
此类中的每个方法调用都返回一块压缩数据。可以将多个块连接在一起,最后将其写入bzip2压缩文件。
此方法清空缓冲区并返回其中的数据块,以附加到压缩对象中。
此函数返回增量解压缩器的对象。解压缩后的数据与流经的数据连接在一起的各个部分形成了未压缩的数据。
以下示例首先压缩列表对象中的每个iem,然后将串联的字节对象写入文件。数据由BZ2Decompressor对象检索。
>>> data = [b'Hello World', b'How are you?', b'welcome to Python'] >>> obj = bz2.BZ2Compressor() >>> f = bz2.open("test.bz2", "wb") >>> d1 = obj.compress(data[0]) >>> d2 = obj.compress(data[1]) >>> d3 = obj.compress(data[2]) >>> d4 = obj.flush() >>> d1,d2,d3,d4 (b'', b'', b'', b'BZh91AY&SYS\x9a~\x99\x00\x00\x03\x1f\x80@\x00\x00\x00\x80@@\x80.G\x96\xa0 \x00!\xa8\xd0\x06\x9a6\x90\xa6LL\x83#\x18\x1d\x83\xee^]\x1e|\xa9\xddgu\x15G/\x1a\x8c\xd1\x90\x14\x8f\x8b\xb9"\x9c(H)\xcd?L\x80') >>> compressedobj=d1+d2+d3+d4 >>> f.write(compressedobj) >>> f.close() >>> obj=bz2.BZ2DeCompressor() >>> f=bz2.open("test.bz2", "rb") >>> data=f.read() >>> obj.decompress(data) b'Hello WorldHow are you?welcome to Python'