该模块提供了一个使用bzip2压缩算法压缩和解压缩数据的综合界面。

bz2模块包含:

  • 用于读写压缩文件open()函数和BZ2File类。
  • BZ2CompressorBZ2Decompressor类增量(DE)压缩。
  • compress()decompress()功能一次性的(de)压缩。

可以安全地从多个线程访问此模块中的所有类。

(De)压缩文件

bz2.openfilenamemode =’r’compresslevel = 9encoding = Noneerrors = Nonenewline = None 
以二进制或文本模式打开bzip2压缩文件,返回文件对象

与构造函数一样BZ2Filefilename参数可以是实际文件名(一个strbytes对象),也可以是要读取或写入的现有文件对象。

所述模式参数可以是任何的'r''rb''w''wb', 'x''xb''a''ab'二进制模式,或者'rt''wt''xt',或'at'为文本模式。默认是'rb'

所述compresslevel参数是从1到9的整数,作为用于 BZ2File构造函数。

对于二进制模式,此函数等效于BZ2File 构造函数:。在这种情况下,不得提供编码错误换行参数。BZ2File(filename, mode, compresslevel=compresslevel)

对于文本模式,将BZ2File创建一个对象,并将其包装在io.TextIOWrapper具有指定编码,错误处理行为和行结尾的 实例中。

版本3.3中的新功能。

改变在3.4版本:'x'加入(独家创作)模式。

在版本3.6中更改:接受类似路径的对象

class bz2.BZ2Filefilenamemode =’r’buffering = Nonecompresslevel = 9 
以二进制模式打开bzip2压缩文件。

如果filename是a strbytesobject,请直接打开指定的文件。否则,filename应该是一个文件对象,用于读取或写入压缩数据。

所述模式参数可以是'r'用于读取(默认值),'w'用于改写,'x'专用创建,或'a'为附加。这些可以等价表示为'rb''wb''xb''ab' 分别。

如果filename是文件对象(而不是实际文件名),则模式 'w'不截断文件,而是等效于'a'

缓冲参数将被忽略。它的使用已被弃用。

如果mode'w'or 'a',则compresslevel可以是介于19指定压缩级别之间的数字 :1产生最小压缩,9(默认)产生最大压缩。

如果模式'r',输入文件可以是多个压缩数据流的连接。

BZ2File提供io.BufferedIOBase除了detach()和之外的所有成员 truncate()with支持迭代和语句。

BZ2File 还提供以下方法:

peek
在不提升文件位置的情况下返回缓冲数据。将返回至少一个字节的数据(除非在EOF处)。返回的确切字节数未指定。

注意

虽然调用peek()不会改变文件的位置BZ2File,但它可能会改变底层文件对象的位置(例如,如果BZ2File是通过传递文件的文件对象构造的)。

版本3.3中的新功能。

版本3.1中已更改:with添加了对语句的支持。

改变在3.3版本:fileno()readable()seekable()writable(), read1()以及readinto()加入方法。

在版本3.3中更改:添加了对文件名为文件对象而不是实际文件名的支持。

改变在3.3版本:'a'添加(追加)模式下,读取多流文件的支持一起。

改变在3.4版本:'x'加入(独家创作)模式。

在版本3.5中更改:read()方法现在接受参数 None

在版本3.6中更改:接受类似路径的对象

增量(de)压缩

class bz2.BZ2Compressorcompresslevel = 9 
创建一个新的压缩器对象。该对象可用于递增地压缩数据。对于单次压缩,请改用该compress()功能。

compresslevel,如果给定,则必须是1和之间的数字9。默认是9

compress数据
向压缩器对象提供数据。如果可能,返回一块压缩数据,否则返回空字节串。

完成向压缩器提供数据后,请调用该 flush()方法以完成压缩过程。

flush
完成压缩过程。返回内部缓冲区中保留的压缩数据。

调用此方法后,可能无法使用压缩器对象。

bz2.BZ2Decompressor
创建一个新的解压缩器对象。该对象可用于递增地解压缩数据。对于单次压缩,请改用该decompress()功能。

注意

decompress()和不同,此类不透明地处理包含多个压缩流的输入BZ2File。如果需要使用解压缩多流输入BZ2Decompressor,则必须为每个流使用新的解压缩程序。

decompressdatamax_length = -1 
解压缩数据(类似字节的对象),将未压缩的数据作为字节返回。一些数据可以在内部缓冲,以便在以后的调用中使用decompress()。返回的数据应与之前调用的输出连接decompress()

如果max_length是非负的,则返回 解压缩数据的最多max_length个字节。如果达到此限制并且可以生成更多输出,则该needs_input属性将设置为False。在这种情况下,下一个呼叫到 decompress()可以提供数据作为b''以获得更多的输出。

如果所有输入数据都已解压缩并返回(因为它小于max_length个字节,或者因为 max_length为负数),则该needs_input属性将设置为True

在达到流结束后尝试解压缩数据会引发EOFError。在流结束后找到的任何数据都将被忽略并保存在unused_data属性中。

版本3.5中已更改:添加了max_length参数。

eof
True 如果已达到流末端标记。

版本3.3中的新功能。

unused_data
在压缩流结束后找到的数据。

如果在到达流结束之前访问此属性,则其值将为b''

needs_input
False如果该decompress()方法可以在需要新的未压缩输入之前提供更多解压缩数据。

版本3.5中的新功能。

一次性(反)压缩

bz2.compressdatacompresslevel = 9 
压缩数据

compresslevel,如果给定,则必须是1和之间的数字9。默认是9

对于增量压缩,请使用BZ2Compressor替代。

bz2.decompress数据
解压缩数据

如果数据是多个压缩流的串联,则解压缩所有流。

对于增量解压缩,请使用BZ2Decompressor替代。

版本3.3中已更改:添加了对多流输入的支持。