12.3. bz2 —压缩与 bzip2 兼容

2.3 版的新Function。

该模块为 bz2 压缩库提供了一个全面的接口。它实现了完整的文件界面,单次(解压缩)Function以及 Sequences(解压缩)类型。

这是 bz2 模块提供的Function的摘要:

Note

不支持多流 bzip2 文件的处理。诸如bz2file之类的模块可帮助您克服这一问题。

12.3.1. (解压缩)文件

BZ2File类提供了 zipfile 的处理。

    • class * bz2. BZ2File(* filename * [,* mode * [,* buffering * [,* compresslevel *]]])
    • 打开一个 bz2 文件。模式可以是'r''w',用于读取(默认)或写入。打开以进行写入时,如果文件不存在,则将创建该文件,否则将其截断。如果给定* buffering ,则0表示未缓冲,较大的数字指定缓冲区的大小;默认值为0。如果给出 compresslevel *,则它必须是19之间的数字;默认值为9。将'U'添加到模式以打开文件以在universal newlines模式下 Importing。在 Importing 文件中结尾的任何行在 Python 中都将被视为'\n'。同样,如此打开的文件获得属性newlines;该属性的值是None(尚未读取换行符),'\r''\n''\r\n'或包含所有可见换行符类型的 Tuples 之一。通用换行符仅在阅读时可用。实例以与普通file实例相同的方式支持迭代。

BZ2File支持with语句。

在 2.7 版中进行了更改:添加了对with语句的支持。

Note

此类不支持包含多个流的 Importing 文件(例如 pbzip2 工具生成的流)。读取此类 Importing 文件时,仅第一个流将可访问。如果需要支持多流文件,请考虑使用第三方bz2file模块(可从PyPI获取)。此模块提供了 Python 3.3 的BZ2File类的反向移植,该类确实支持多流文件。

  • close ( )

    • 关闭文件。将数据属性closed设置为 true。关闭的文件不能用于进一步的 I/O 操作。 close()可以多次调用而不会出错。
  • read([* size *])

    • 读取最多* size 个未压缩字节,以字符串形式返回。如果 size *参数为负或Ellipsis,请读取直到达到 EOF。
  • readline([* size *])

    • 以字符串形式返回文件中的下一行,并保留换行符。非负* size *参数限制要返回的最大字节数(然后可能会返回不完整的行)。在 EOF 返回一个空字符串。
  • readlines([* size *])

    • 返回读取的行列表。可选的* size *参数(如果给出)是返回行中字节总数的近似边界。
  • xreadlines ( )

    • 为了向后兼容。 BZ2File对象现在包括以前在xreadlines模块中实现的性能优化。

从 2.3 版开始不推荐使用:之所以存在此名称,仅是为了与该名称在file个对象上的方法兼容。请改用for line in file

  • seek(* offset * [,* whence *])
    • 移动到新文件位置。参数* offset 是字节数。可选参数 whence *默认为os.SEEK_SET0(从文件开头偏移;偏移应为>= 0);其他值是os.SEEK_CUR1(相对于当前位置移动;偏移量可以为正或负),以及os.SEEK_END2(相对于文件末尾移动;偏移量通常为负,尽管许多平台都允许在文件末尾查找) 。

请注意,模拟了 bz2 文件的查找,并且根据参数,操作可能会非常慢。

  • tell ( )

    • 返回当前文件位置,一个整数(可以是一个长整数)。
  • write(* data *)

    • 将字符串* data *写入文件。请注意,由于存在缓冲,在磁盘上的文件反映写入的数据之前可能需要close()
  • writelines(* sequence_of_strings *)

    • 将字符串序列写入文件。请注意,未添加换行符。该序列可以是产生字符串的任何可迭代对象。这等效于为每个字符串调用 write()。

12.3.2. Sequences(解压缩)

使用类BZ2CompressorBZ2Decompressor完成 Sequences 压缩和解压缩。

    • class * bz2. BZ2Compressor([* compresslevel *])
    • 创建一个新的压缩器对象。该对象可用于 Sequences 压缩数据。如果您想一次压缩数据,请使用compress()Function。 * compresslevel *参数(如果提供)必须为19之间的数字;默认值为9
  • compress(* data *)

    • 向压缩机对象提供更多数据。只要有可能,它将返回压缩数据块。提供完要压缩的数据后,请调用flush()方法以完成压缩过程,并返回内部缓冲区中剩余的内容。
  • flush ( )

    • 完成压缩过程并返回内部缓冲区中剩余的内容。调用此方法后,一定不能使用 Compressor 对象。
  • 类别 bz2. BZ2Decompressor

    • 创建一个新的解压缩器对象。该对象可用于 Sequences 解压缩数据。如果要一次性解压缩数据,请使用decompress()函数。
  • decompress(* data *)

    • 向解压缩器对象提供更多数据。只要有可能,它将返回解压缩的数据块。如果在找到流的末尾后try解压缩数据,则将引发EOFError。如果在流结束后发现任何数据,它将被忽略并保存在unused_data属性中。

12.3.3. 一击(解压缩)

passcompress()decompress()函数提供单次压缩和解压缩。

  • bz2. compress(* data * [,* compresslevel *])

    • 一次压缩* data *。如果要 Sequences 压缩数据,请改用BZ2Compressor的实例。 * compresslevel *参数(如果提供)必须为19之间的数字;默认值为9
  • bz2. decompress(* data *)

    • 一次解压缩* data *。如果要 Sequences 解压缩数据,请改用BZ2Decompressor的实例。