12.3. bz2 — 与 bzip2 兼容的压缩 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/bz2
跳转至:导航、​搜索

12.3. bz2 — 压缩兼容 bzip2

2.3 版中的新功能。


该模块为 bz2 压缩库提供了一个综合接口。 它实现了完整的文件接口、一次性(解)压缩功能和顺序(解)压缩类型。

以下是 bz2 模块提供的功能摘要:

笔记

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


12.3.1. (解)压缩文件

BZ2File 类提供了对压缩文件的处理。

class bz2.BZ2File(filename[, mode[, buffering[, compresslevel]]])

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

BZ2File 支持 [X30X]with 语句。

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

笔记

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

close()

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

read([size])

最多读取 size 个未压缩字节,以字符串形式返回。 如果 size 参数为负数或省略,则读取直到达到 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. 顺序(解)压缩

使用 BZ2CompressorBZ2Decompressor 类完成顺序压缩和解压缩。

class bz2.BZ2Compressor([compresslevel])

创建一个新的压缩器对象。 该对象可用于按顺序压缩数据。 如果您想一次性压缩数据,请改用 compress() 函数。 compresslevel 参数,如果给定,必须是 19 之间的数字; 默认值为 9

compress(data)

向压缩器对象提供更多数据。 它将尽可能返回压缩数据块。 当您完成提供要压缩的数据时,调用 flush() 方法来完成压缩过程,并返回内部缓冲区中剩余的内容。

flush()

完成压缩过程并返回内部缓冲区中剩余的内容。 调用此方法后不得使用压缩器对象。

class bz2.BZ2Decompressor
创建一个新的解压器对象。 该对象可用于顺序解压缩数据。 如果您想一次性解压数据,请改用 decompress() 函数。
decompress(data)
向解压器对象提供更多数据。 它将尽可能返回解压缩的数据块。 如果您在找到流末尾后尝试解压缩数据,则会引发 EOFError。 如果在流结束后发现任何数据,它将被忽略并保存在 unused_data 属性中。


12.3.3. 一次性(解)压缩

通过 compress()decompress() 函数提供一次性压缩和解压缩。

bz2.compress(data[, compresslevel])
一次压缩数据。 如果要按顺序压缩数据,请改用 BZ2Compressor 的实例。 compresslevel 参数,如果给定,必须是 19 之间的数字; 默认值为 9
bz2.decompress(data)
一键解压【X11X】数据【X19X】。 如果要按顺序解压缩数据,请改用 BZ2Decompressor 的实例。