Skip to main content

13.3. bz2 —支持 bzip2 压缩

源代码: Lib/bz2.py


此模块提供了一个全面的接口,用于使用bzip2压缩算法压缩和解压缩数据。

bz2 模块包含:

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

13.3.1. (De)压缩文件

bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)

以二进制或文本模式打开bzip2压缩文件,返回 file object

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

mode 参数可以是用于二进制模式的 'r''rb''w''wb''x''xb''a''ab' 中的任何一个,或者对于文本模式是 'rt''wt''xt''at' 中的任何一个。默认值为 'rb'

compresslevel 参数是一个从1到9的整数,对于 BZ2File 构造函数。

对于二进制模式,此函数等同于 BZ2File 构造函数:BZ2File(filename, mode, compresslevel=compresslevel)。在这种情况下,不能提供 encodingerrorsnewline 参数。

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

3.3 新版功能.

在 3.4 版更改: 添加了 'x' (独占创建)模式。

在 3.6 版更改: 接受 path-like object

class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)

以二进制模式打开bzip2压缩文件。

如果 filenamestrbytes 对象,请直接打开命名文件。否则,filename 应该是 file object,它将用于读取或写入压缩数据。

mode 参数可以是用于读取的 'r' (默认),用于覆盖的 'w',用于独占创建的 'x' 或用于附加的 'a'。这些可以分别等效地给出为 'rb''wb''xb''ab'

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

buffering 参数被忽略。它的使用已被弃用。

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

如果 mode'r',则输入文件可以是多个压缩流的级联。

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

BZ2File 还提供了以下方法:

peek([n])

返回缓冲数据,而不提前文件位置。将返回至少一个字节的数据(除非在EOF)。返回的确切字节数未指定。

注解

当调用 peek() 不改变 BZ2File 的文件位置时,它可以改变底层文件对象的位置(例如,如果通过传递 filename 的文件对象来构造 BZ2File)。

3.3 新版功能.

在 3.1 版更改: 增加了对 with 声明的支持。

在 3.3 版更改: 加入 fileno()readable()seekable()writable()read1()readinto() 方法。

在 3.3 版更改: 添加了对作为 file objectfilename 的支持,而不是实际文件名。

在 3.3 版更改: 添加了 'a' (append)模式,以及支持读取多流文件。

在 3.4 版更改: 添加了 'x' (独占创建)模式。

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

在 3.6 版更改: 接受 path-like object

13.3.2. 增量(de)压缩

class bz2.BZ2Compressor(compresslevel=9)

创建新的压缩器对象。该对象可以用于递增地压缩数据。对于单次压缩,请改用 compress() 功能。

compresslevel,如果给出,必须是 19 之间的数字。默认值为 9

compress(data)

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

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

flush()

完成压缩过程。返回内部缓冲区中剩余的压缩数据。

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

class bz2.BZ2Decompressor

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

注解

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

decompress(data, max_length=-1)

解压缩 databytes-like object),以字节形式返回未压缩数据。一些 data 可以在内部缓冲,以用于稍后对 decompress() 的调用。返回的数据应该与任何以前对 decompress() 的调用的输出连接。

如果 max_length 是非负的,则返回解压缩数据的大多数 max_length 字节。如果达到此限制并且可以产生进一步的输出,则 needs_input 属性将被设置为 False。在这种情况下,对 decompress() 的下一次调用可以提供 data 作为 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 新版功能.

13.3.3. 单次(de)压缩

bz2.compress(data, compresslevel=9)

压缩 data

compresslevel,如果给出,必须是 19 之间的数字。默认值为 9

对于增量压缩,请使用 BZ2Compressor

bz2.decompress(data)

解压缩 data

如果 data 是多个压缩流的级联,则解压缩所有流。

对于增量解压缩,请改用 BZ2Decompressor

在 3.3 版更改: 增加了对多流输入的支持。