Python bz2模块
bzip2是一种用于文件压缩和解压缩的开源算法。Python的bz2模块提供了以编程方式实现bzip2算法的功能。
open()函数是该模块的主要接口。
open()函数
该函数打开一个bzip2压缩文件并返回一个文件对象。文件可以以二进制/文本模式以读/写权限打开。函数根据1到9之间的compressionlevel参数执行压缩。
write()函数
当文件以’w’或’wb’模式打开时,该函数可用于文件对象。在二进制模式下,它将压缩的二进制数据写入文件。在普通文本模式下,文件对象被包装在TextIOWrapper对象中执行编码。
read()函数
当以读取模式打开时,该函数读取并返回未经压缩的数据。
以下代码将压缩数据写入bzip2文件。
import bz2
f=bz2.open("test.bz2", "wb")
data=b'Welcome to TutorialsPoint'
f.write(data)
f.close()
这将在当前目录中创建test.bz2文件。任何解压工具都会显示其中的’test’文件。要从这个test.bz2文件中读取未压缩的数据,请使用以下代码 –
import bz2
f=bz2.open("test.bz2", "rb")
data=f.read()
print (data)
b'Welcome to TutorialsPoint'
这个bz2模块还定义了BZ2File类。它的对象根据构造函数的mode参数充当压缩器和解压器。
BZ2File()方法
这是构造函数。与open()函数一样,需要file和mode参数。压缩级别默认为9,可以在1到9之间。
BZ2Compressor()方法
此函数返回增量压缩器类的对象。在该类中,对compress()方法的每次调用都返回一块压缩数据。多个块可以连接在一起,最终写入到bzip2压缩文件中。
flush()方法
此方法清空缓冲区并返回其中的数据块,以追加到压缩对象中。
BZ2Decompressor()方法
此函数返回增量解压缩器的对象。解压数据的各个块与刷新的数据连接在一起,形成未压缩的数据。
以下示例首先对列表对象中的每个项目进行压缩,并将连接的字节对象写入文件。然后使用BZ2Decompressor对象检索数据。
import bz2
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()
compressedobj=d1+d2+d3+d4
f.write(compressedobj)
f.close()
使用BZ2Decompressor类进行解压缩。
obj=bz2.BZ2Decompressor()
f=bz2.open("test.bz2", "rb")
data=f.read()
obj.decompress(data)