bz2支持bzip2压缩(3)Python数据压缩和存档(必读进阶Python教程)(参考资料)
该模块提供了一个使用bzip2压缩算法压缩和解压缩数据的综合界面。
该bz2
模块包含:
- 用于读写压缩文件的
open()
函数和BZ2File
类。 - 在
BZ2Compressor
和BZ2Decompressor
类增量(DE)压缩。 - 该
compress()
和decompress()
功能一次性的(de)压缩。
可以安全地从多个线程访问此模块中的所有类。
(De)压缩文件
bz2.
open
(filename,mode =’r’,compresslevel = 9,encoding = None,errors = None,newline = None )- 以二进制或文本模式打开bzip2压缩文件,返回文件对象。
与构造函数一样
BZ2File
,filename参数可以是实际文件名(一个str
或bytes
对象),也可以是要读取或写入的现有文件对象。所述模式参数可以是任何的
'r'
,'rb'
,'w'
,'wb'
,'x'
,'xb'
,'a'
或'ab'
二进制模式,或者'rt'
,'wt'
,'xt'
,或'at'
为文本模式。默认是'rb'
。所述compresslevel参数是从1到9的整数,作为用于
BZ2File
构造函数。对于二进制模式,此函数等效于
BZ2File
构造函数:。在这种情况下,不得提供编码,错误和换行参数。BZ2File(filename, mode, compresslevel=compresslevel)
对于文本模式,将
BZ2File
创建一个对象,并将其包装在io.TextIOWrapper
具有指定编码,错误处理行为和行结尾的 实例中。版本3.3中的新功能。
改变在3.4版本:将
'x'
加入(独家创作)模式。在版本3.6中更改:接受类似路径的对象。
- class
bz2.
BZ2File
(filename,mode =’r’,buffering = None,compresslevel = 9 ) - 以二进制模式打开bzip2压缩文件。
如果filename是a
str
或bytes
object,请直接打开指定的文件。否则,filename应该是一个文件对象,用于读取或写入压缩数据。所述模式参数可以是
'r'
用于读取(默认值),'w'
用于改写,'x'
专用创建,或'a'
为附加。这些可以等价表示为'rb'
,'wb'
,'xb'
和'ab'
分别。如果filename是文件对象(而不是实际文件名),则模式
'w'
不截断文件,而是等效于'a'
。该缓冲参数将被忽略。它的使用已被弃用。
如果mode是
'w'
or'a'
,则compresslevel可以是介于1
和9
指定压缩级别之间的数字 :1
产生最小压缩,9
(默认)产生最大压缩。如果模式是
'r'
,输入文件可以是多个压缩数据流的连接。BZ2File
提供io.BufferedIOBase
除了detach()
和之外的所有成员truncate()
。with
支持迭代和语句。BZ2File
还提供以下方法:peek
([ n ] )- 在不提升文件位置的情况下返回缓冲数据。将返回至少一个字节的数据(除非在EOF处)。返回的确切字节数未指定。
注意
虽然调用
peek()
不会改变文件的位置BZ2File
,但它可能会改变底层文件对象的位置(例如,如果BZ2File
是通过传递文件名的文件对象构造的)。版本3.3中的新功能。
版本3.1中已更改:
with
添加了对语句的支持。改变在3.3版本:该
fileno()
,readable()
,seekable()
,writable()
,read1()
以及readinto()
加入方法。在版本3.3中更改:添加了对文件名为文件对象而不是实际文件名的支持。
改变在3.3版本:将
'a'
添加(追加)模式下,读取多流文件的支持一起。改变在3.4版本:将
'x'
加入(独家创作)模式。在版本3.5中更改:该
read()
方法现在接受参数None
。在版本3.6中更改:接受类似路径的对象。
增量(de)压缩
- class
bz2.
BZ2Compressor
(compresslevel = 9 ) - 创建一个新的压缩器对象。该对象可用于递增地压缩数据。对于单次压缩,请改用该
compress()
功能。compresslevel,如果给定,则必须是
1
和之间的数字9
。默认是9
。compress
(数据)- 向压缩器对象提供数据。如果可能,返回一块压缩数据,否则返回空字节串。
完成向压缩器提供数据后,请调用该
flush()
方法以完成压缩过程。
flush
()- 完成压缩过程。返回内部缓冲区中保留的压缩数据。
调用此方法后,可能无法使用压缩器对象。
- 类
bz2.
BZ2Decompressor
- 创建一个新的解压缩器对象。该对象可用于递增地解压缩数据。对于单次压缩,请改用该
decompress()
功能。注意
与
decompress()
和不同,此类不透明地处理包含多个压缩流的输入BZ2File
。如果需要使用解压缩多流输入BZ2Decompressor
,则必须为每个流使用新的解压缩程序。decompress
(data,max_length = -1 )- 解压缩数据(类似字节的对象),将未压缩的数据作为字节返回。一些数据可以在内部缓冲,以便在以后的调用中使用
decompress()
。返回的数据应与之前调用的输出连接decompress()
。如果max_length是非负的,则返回 解压缩数据的最多max_length个字节。如果达到此限制并且可以生成更多输出,则该
needs_input
属性将设置为False
。在这种情况下,下一个呼叫到decompress()
可以提供数据作为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中的新功能。
一次性(反)压缩
bz2.
compress
(data,compresslevel = 9 )- 压缩数据。
compresslevel,如果给定,则必须是
1
和之间的数字9
。默认是9
。对于增量压缩,请使用
BZ2Compressor
替代。
bz2.
decompress
(数据)- 解压缩数据。
如果数据是多个压缩流的串联,则解压缩所有流。
对于增量解压缩,请使用
BZ2Decompressor
替代。版本3.3中已更改:添加了对多流输入的支持。