On this page
12.3. bz2 —压缩与 bzip2 兼容
2.3 版的新Function。
该模块为 bz2 压缩库提供了一个全面的接口。它实现了完整的文件界面,单次(解压缩)Function以及 Sequences(解压缩)类型。
这是 bz2 模块提供的Function的摘要:
BZ2File类实现了完整的文件接口,包括readline(),readlines(),writelines(),seek()等;
BZ2File类实现了通用的换行支持;
BZ2File类使用从文件对象借来的预读算法提供了优化的行迭代;
BZ2Compressor和BZ2Decompressor类支持 Sequences 压缩(解压缩);
compress()和decompress()Function支持单次压缩。
线程安全使用单独的锁定机制。
Note
不支持多流 bzip2 文件的处理。诸如bz2file之类的模块可帮助您克服这一问题。
12.3.1. (解压缩)文件
BZ2File类提供了 zipfile 的处理。
-
- class *
bz2.
BZ2File
(* filename * [,* mode * [,* buffering * [,* compresslevel *]]])
- 打开一个 bz2 文件。模式可以是
'r'
或'w'
,用于读取(默认)或写入。打开以进行写入时,如果文件不存在,则将创建该文件,否则将其截断。如果给定* buffering ,则0
表示未缓冲,较大的数字指定缓冲区的大小;默认值为0
。如果给出 compresslevel *,则它必须是1
和9
之间的数字;默认值为9
。将'U'
添加到模式以打开文件以在universal newlines模式下 Importing。在 Importing 文件中结尾的任何行在 Python 中都将被视为'\n'
。同样,如此打开的文件获得属性newlines
;该属性的值是None
(尚未读取换行符),'\r'
,'\n'
,'\r\n'
或包含所有可见换行符类型的 Tuples 之一。通用换行符仅在阅读时可用。实例以与普通file实例相同的方式支持迭代。
- class *
在 2.7 版中进行了更改:添加了对with语句的支持。
Note
close
( )- 关闭文件。将数据属性
closed
设置为 true。关闭的文件不能用于进一步的 I/O 操作。 close()可以多次调用而不会出错。
- 关闭文件。将数据属性
read
([* size *])- 读取最多* size 个未压缩字节,以字符串形式返回。如果 size *参数为负或Ellipsis,请读取直到达到 EOF。
readline
([* size *])- 以字符串形式返回文件中的下一行,并保留换行符。非负* size *参数限制要返回的最大字节数(然后可能会返回不完整的行)。在 EOF 返回一个空字符串。
readlines
([* size *])- 返回读取的行列表。可选的* size *参数(如果给出)是返回行中字节总数的近似边界。
xreadlines
( )- 为了向后兼容。 BZ2File对象现在包括以前在
xreadlines
模块中实现的性能优化。
- 为了向后兼容。 BZ2File对象现在包括以前在
从 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
(相对于文件末尾移动;偏移量通常为负,尽管许多平台都允许在文件末尾查找) 。
- 移动到新文件位置。参数* offset 是字节数。可选参数 whence *默认为
请注意,模拟了 bz2 文件的查找,并且根据参数,操作可能会非常慢。
tell
( )- 返回当前文件位置,一个整数(可以是一个长整数)。
write
(* data *)- 将字符串* data *写入文件。请注意,由于存在缓冲,在磁盘上的文件反映写入的数据之前可能需要close()。
writelines
(* sequence_of_strings *)- 将字符串序列写入文件。请注意,未添加换行符。该序列可以是产生字符串的任何可迭代对象。这等效于为每个字符串调用 write()。
12.3.2. Sequences(解压缩)
使用类BZ2Compressor和BZ2Decompressor完成 Sequences 压缩和解压缩。
-
- class *
bz2.
BZ2Compressor
([* compresslevel *])
- 创建一个新的压缩器对象。该对象可用于 Sequences 压缩数据。如果您想一次压缩数据,请使用compress()Function。 * compresslevel *参数(如果提供)必须为
1
和9
之间的数字;默认值为9
。
- class *
compress
(* data *)- 向压缩机对象提供更多数据。只要有可能,它将返回压缩数据块。提供完要压缩的数据后,请调用flush()方法以完成压缩过程,并返回内部缓冲区中剩余的内容。
flush
( )- 完成压缩过程并返回内部缓冲区中剩余的内容。调用此方法后,一定不能使用 Compressor 对象。
类别
bz2.
BZ2Decompressor
- 创建一个新的解压缩器对象。该对象可用于 Sequences 解压缩数据。如果要一次性解压缩数据,请使用decompress()函数。
decompress
(* data *)- 向解压缩器对象提供更多数据。只要有可能,它将返回解压缩的数据块。如果在找到流的末尾后try解压缩数据,则将引发EOFError。如果在流结束后发现任何数据,它将被忽略并保存在
unused_data
属性中。
- 向解压缩器对象提供更多数据。只要有可能,它将返回解压缩的数据块。如果在找到流的末尾后try解压缩数据,则将引发EOFError。如果在流结束后发现任何数据,它将被忽略并保存在
12.3.3. 一击(解压缩)
passcompress()和decompress()函数提供单次压缩和解压缩。
bz2.
compress
(* data * [,* compresslevel *])- 一次压缩* data *。如果要 Sequences 压缩数据,请改用BZ2Compressor的实例。 * compresslevel *参数(如果提供)必须为
1
和9
之间的数字;默认值为9
。
- 一次压缩* data *。如果要 Sequences 压缩数据,请改用BZ2Compressor的实例。 * compresslevel *参数(如果提供)必须为
bz2.
decompress
(* data *)- 一次解压缩* data *。如果要 Sequences 解压缩数据,请改用BZ2Decompressor的实例。