gzip支持gzip文件(2)Python数据压缩和存档(必读进阶Python教程)(参考资料)
这个模块提供了一个简单的界面来压缩和解压缩文件,就像GNU程序gzip和gunzip一样。
数据压缩由zlib
模块提供。
该gzip
模块提供了GzipFile
类,以及 open()
,compress()
和decompress()
方便的功能。本GzipFile
类读取和写入gzip的 -format文件,自动压缩或解压缩数据,使得它看起来像一个普通的文件对象。
请注意,此模块不支持可由gzip和gunzip程序解压缩的其他文件格式,例如compress和pack生成的 文件格式 。
该模块定义了以下项目:
gzip.
open
(filename,mode =’rb’,compresslevel = 9,encoding = None,errors = None,newline = None )- 以二进制或文本模式打开gzip压缩文件,返回文件对象。
该文件名参数可以是一个实际的文件名(一个
str
或bytes
对象),或者现有文件对象从读取或写入到。所述模式参数可以是任何的
'r'
,'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
或'xb'
二进制模式,或者'rt'
,'at'
,'wt'
,或'xt'
为文本模式。默认是'rb'
。所述compresslevel参数是从0到9的整数,作为用于
GzipFile
构造函数。对于二进制模式,此函数等效于
GzipFile
构造函数:。在这种情况下, 不得提供编码,错误和换行参数。GzipFile(filename, mode, compresslevel)
对于文本模式,将
GzipFile
创建一个对象,并将其包装在io.TextIOWrapper
具有指定编码,错误处理行为和行结尾的 实例中。版本3.3中已更改:添加了对作为文件对象的文件名的支持,对文本模式的支持以及编码,错误和换行参数。
改变在3.4版本:为增加的支持
'x'
,'xb'
和'xt'
模式。在版本3.6中更改:接受类似路径的对象。
- class
gzip.
GzipFile
(filename = None,mode = None,compresslevel = 9,fileobj = None,mtime = None ) GzipFile
类的构造方法,它模拟文件对象的大多数方法,但方法除外truncate()
。必须给fileobj和filename中的至少一个赋予非平凡值。新类实例基于fileobj,它可以是常规文件,
io.BytesIO
对象或任何其他模拟文件的对象。默认为None
,在这种情况下打开filename以提供文件对象。当fileobj不是时
None
,filename参数仅用于包含在gzip文件头中,该头文件可能包含未压缩文件的原始文件名。如果可辨别,它默认为fileobj的文件名; 否则,它默认为空字符串,在这种情况下,原始文件名不包含在标题中。该模式参数可以是任意的
'r'
,'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
,或者'xb'
,根据文件是否被读取或写入。如果可辨别,则默认为fileobj的模式; 否则,默认为'rb'
。请注意,该文件始终以二进制模式打开。要以文本模式打开一个压缩文件,使用
open()
(或包装你GzipFile
有io.TextIOWrapper
)。所述compresslevel参数是从一个整数
0
,以9
控制压缩的水平;1
速度最快,压缩率9
最低,速度最慢,压缩率最高。0
没有压缩。默认是9
。的修改时间参数是压缩时将被写入到最后的修改时间字段中的数据流中的可选的数字时间戳记。它应该只在压缩模式下提供。如果省略或
None
,则使用当前时间。有关mtime
详细信息,请参阅该属性。调用
GzipFile
对象的close()
方法不会关闭 fileobj,因为您可能希望在压缩数据之后附加更多材料。这也允许您将io.BytesIO
打开的对象作为fileobj传递,并使用io.BytesIO
对象的getvalue()
方法检索生成的内存缓冲区。GzipFile
支持io.BufferedIOBase
接口,包括迭代和with
语句。只有truncate()
方法没有实现。GzipFile
还提供了以下方法和属性:peek
(n )- 在不提前文件位置的情况下读取n个未压缩的字节。压缩流上最多只有一次读取以满足呼叫。返回的字节数可能多于或少于请求的数量。
注意
虽然调用
peek()
不会更改文件的位置GzipFile
,但它可能会更改底层文件对象的位置(例如,如果GzipFile
使用fileobj参数构造 )。版本3.2中的新功能。
mtime
- 当解压缩时,可以从该属性读取最近读取的头中的最后修改时间字段的值,作为整数。读取任何标题之前的初始值是
None
。所有gzip压缩流都需要包含此时间戳字段。某些程序(如gunzip)使用时间戳。格式与返回的对象的返回值
time.time()
和st_mtime
属性相同os.stat()
。
在3.1版中更改:
with
添加了对语句的支持,以及 mtime构造函数参数和mtime
属性。版本3.2中已更改:添加了对零填充和不可搜索文件的支持。
版本3.3中已更改:此
io.BufferedIOBase.read1()
方法现已实施。版本3.4中已更改:添加了对
'x'
和'xb'
模式的支持。在3.5版中更改:添加了对写入任意 字节对象的支持。该
read()
方法现在接受一个参数None
。在版本3.6中更改:接受类似路径的对象。
gzip.
compress
(data,compresslevel = 9 )- 压缩数据,返回
bytes
包含压缩数据的对象。 compresslevel与GzipFile
上面的构造函数含义相同。版本3.2中的新功能。
gzip.
decompress
(数据)- 解压缩数据,返回
bytes
包含未压缩数据的对象。版本3.2中的新功能。
用法的例子
如何读取压缩文件的示例:
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
file_content = f.read()
如何创建压缩GZIP文件的示例:
import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
f.write(content)
如何GZIP压缩现有文件的示例:
import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
如何GZIP压缩二进制字符串的示例:
import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)