You are here:  Home » Python » gzip支持gzip文件(2)Python数据压缩和存档(必读进阶Python教程)(参考资料)

这个模块提供了一个简单的界面来压缩和解压缩文件,就像GNU程序gzipgunzip一样。

数据压缩由zlib模块提供。

gzip模块提供了GzipFile类,以及 open()compress()decompress()方便的功能。本GzipFile类读取和写入gzip的 -format文件,自动压缩或解压缩数据,使得它看起来像一个普通的文件对象

请注意,此模块不支持可由gzipgunzip程序解压缩的其他文件格式,例如compresspack生成的 文件格式 。

该模块定义了以下项目:

gzip.openfilenamemode =’rb’compresslevel = 9encoding = Noneerrors = Nonenewline = 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.GzipFilefilename = Nonemode = Nonecompresslevel = 9fileobj = Nonemtime = None 
GzipFile类的构造方法,它模拟文件对象的大多数方法,但方法除外truncate() 。必须给fileobjfilename中的至少一个赋予非平凡值。

新类实例基于fileobj,它可以是常规文件, io.BytesIO对象或任何其他模拟文件的对象。默认为None,在这种情况下打开filename以提供文件对象。

fileobj不是时Nonefilename参数仅用于包含在gzip文件头中,该头文件可能包含未压缩文件的原始文件名。如果可辨别,它默认为fileobj的文件名; 否则,它默认为空字符串,在这种情况下,原始文件名不包含在标题中。

模式参数可以是任意的'r''rb''a''ab''w', 'wb''x',或者'xb',根据文件是否被读取或写入。如果可辨别,则默认为fileobj的模式; 否则,默认为'rb'

请注意,该文件始终以二进制模式打开。要以文本模式打开一个压缩文件,使用open()(或包装你GzipFileio.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个未压缩的字节。压缩流上最多只有一次读取以满足呼叫。返回的字节数可能多于或少于请求的数量。

注意

虽然调用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.compressdatacompresslevel = 9 
压缩数据,返回bytes包含压缩数据的对象。 compresslevelGzipFile上面的构造函数含义相同。

版本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)

 

也可以看看

模 zlib
支持gzip文件格式所需的基本数据压缩模块。