12.3. bz2 — 与 bzip2 兼容的压缩 — Python 文档
12.3. bz2 — 压缩兼容 bzip2
2.3 版中的新功能。
该模块为 bz2 压缩库提供了一个综合接口。 它实现了完整的文件接口、一次性(解)压缩功能和顺序(解)压缩类型。
以下是 bz2 模块提供的功能摘要:
- BZ2File类实现了完整的文件接口,包括readline()、readlines()、writelines()、seek( ) 等;
- BZ2File 类实现模拟 seek() 支持;
- BZ2File 类实现了通用换行支持;
- BZ2File 类使用从文件对象借用的预读算法提供优化的行迭代;
- BZ2Compressor 和 BZ2Decompressor 类支持顺序(解)压缩;
- compress() 和 decompress() 函数支持一次性(解)压缩;
- 线程安全使用单独的锁定机制。
12.3.1. (解)压缩文件
BZ2File 类提供了对压缩文件的处理。
- class bz2.BZ2File(filename[, mode[, buffering[, compresslevel]]])
打开一个 bz2 文件。 模式可以是
'r'
或'w'
,用于读取(默认)或写入。 当为写入而打开时,如果文件不存在,则将创建该文件,否则将被截断。 如果给出 buffering,则0
表示无缓冲,较大的数字指定缓冲区大小; 默认值为0
。 如果给出了 compresslevel,它必须是一个介于1
和9
之间的数字; 默认值为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_SET
或0
(从文件开始的偏移量;偏移量应为>= 0
); 其他值为os.SEEK_CUR
或1
(相对于当前位置移动;偏移量可以为正或负)和os.SEEK_END
或2
(相对于终点移动)文件;偏移量通常为负数,尽管许多平台允许在文件末尾之外查找)。请注意,bz2 文件的搜索是模拟的,根据参数,操作可能会非常慢。
- tell()
返回当前文件位置,一个整数(可能是一个长整数)。
- write(data)
将字符串 data 写入文件。 请注意,由于缓冲,在磁盘上的文件反映写入的数据之前,可能需要 close()。
- writelines(sequence_of_strings)
将字符串序列写入文件。 请注意,不添加换行符。 序列可以是产生字符串的任何可迭代对象。 这相当于为每个字符串调用 write()。
12.3.2. 顺序(解)压缩
使用 BZ2Compressor 和 BZ2Decompressor 类完成顺序压缩和解压缩。
- class bz2.BZ2Compressor([compresslevel])
创建一个新的压缩器对象。 该对象可用于按顺序压缩数据。 如果您想一次性压缩数据,请改用 compress() 函数。 compresslevel 参数,如果给定,必须是
1
和9
之间的数字; 默认值为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 参数,如果给定,必须是
1
和9
之间的数字; 默认值为9
。
- bz2.decompress(data)
- 一键解压【X11X】数据【X19X】。 如果要按顺序解压缩数据,请改用 BZ2Decompressor 的实例。