gzip ---支持 gzip 文件夹

源代码: Lib/gzip.py


这个模块提供了一个简单的接口,可以像GNU程序一样压缩和解压缩文件。 gzipgunzip 会。

数据压缩由 zlib 模块。

这个 gzip 模块提供 GzipFile 类,以及 open()compress()decompress() 方便功能。这个 GzipFile 类读写 gzip -格式化文件,自动压缩或解压缩数据,使其看起来像普通的 file object .

请注意,可以通过 gzipgunzip 程序,例如由 compresspack ,不受此模块支持。

该模块定义了以下各项:

gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

以二进制或文本模式打开gzip压缩文件,返回 file object .

这个 filename 参数可以是实际文件名(a strbytes 对象),或要读取或写入的现有文件对象。

这个 mode 参数可以是 'r''rb''a''ab''w''wb''x''xb' 对于二进制模式,或 'rt''at''wt''xt' 用于文本模式。默认值为 'rb' .

这个 压缩能级 参数是从0到9的整数,至于 GzipFile 构造函数。

对于二进制模式,此函数等价于 GzipFile 构造函数: GzipFile(filename, mode, compresslevel) . 在这种情况下, encodingerrorsnewline 不能提供参数。

对于文本模式,A GzipFile 对象被创建并封装在 io.TextIOWrapper 具有指定编码、错误处理行为和行尾的实例。

在 3.3 版更改: 为添加了支持 filename 作为文件对象,支持文本模式,以及 encodingerrorsnewline 参数。

在 3.4 版更改: 增加了对 'x''xb''xt' 模式。

在 3.6 版更改: 接受一 path-like object .

exception gzip.BadGzipFile

为无效的gzip文件引发异常。它继承了 OSError . EOFErrorzlib.error 对于无效的gzip文件也可以引发。

3.8 新版功能.

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

的构造函数 GzipFile 类,它模拟 file object ,除了 truncate() 方法。至少其中之一 文件对象filename 必须给出一个非平凡的值。

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

什么时候? 文件对象 不是 None , the filename 参数仅用于包含在 gzip 文件头,可能包括未压缩文件的原始文件名。默认为文件名 文件对象 ,如果可以识别;否则,它默认为空字符串,在这种情况下,原始文件名不包含在头中。

这个 mode 参数可以是 'r''rb''a''ab''w''wb''x''xb' ,取决于文件是读还是写。默认为 文件对象 如果可以识别,则默认为 'rb' . 在将来,Python会发布 文件对象 将不使用。最好总是详细说明 mode 写作。

请注意,文件始终以二进制模式打开。要以文本模式打开压缩文件,请使用 open() (或封装你的 GzipFile 用一个 io.TextIOWrapper

这个 压缩能级 参数是来自的整数 09 控制压缩水平; 1 速度最快,产生的压缩最小,并且 9 最慢,产生的压缩量最大。 0 没有压缩。默认值为 9 .

这个 mtime 参数是一个可选的数字时间戳,在压缩时写入流中的最后一个修改时间字段。它只能在压缩模式下提供。如果省略或 None ,使用当前时间。见 mtime 属性以获取更多详细信息。

调用一个 GzipFile 对象的 close() 方法不关闭 文件对象 ,因为您可能希望在压缩数据之后附加更多的材料。这还允许您通过 io.BytesIO 对象已打开以写入为 文件对象 ,并使用 io.BytesIO 对象的 getvalue() 方法。

GzipFile 支持 io.BufferedIOBase 接口,包括迭代和 with 语句。只有 truncate() 方法未实现。

GzipFile 还提供以下方法和属性:

peek(n)

n 未压缩的字节,而不推进文件位置。在压缩流上最多进行一次读取以满足调用。返回的字节数可能大于或小于请求的字节数。

注解

调用时 peek() 不更改的文件位置 GzipFile 它可以更改基础文件对象的位置(例如,如果 GzipFile 是用 文件对象 参数)。

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 版更改: 增加了对任意写入的支持 bytes-like objects . 这个 read() 方法现在接受的参数为 None .

在 3.6 版更改: 接受一 path-like object .

3.9 版后已移除: 打开 GzipFile 用于不指定 mode 参数已弃用。

gzip.compress(data, compresslevel=9, *, mtime=None)

压缩 data 返回一个 bytes 包含压缩数据的对象。 压缩能级mtime 与中的含义相同 GzipFile 上面的构造函数。

3.2 新版功能.

在 3.8 版更改: 增加了 mtime 可复制输出的参数。

gzip.decompress(data)

解压 data 返回一个 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 文件格式。

命令行界面

这个 gzip 模块提供了一个简单的命令行接口来压缩或解压缩文件。

一旦执行 gzip 模块保存输入文件。

在 3.8 版更改: 添加具有用法的新命令行接口。默认情况下,执行CLI时,默认压缩级别为6。

命令行选项

file

如果 file 未指定,读取自 sys.stdin .

--fast

表示最快的压缩方法(较少的压缩)。

--best

指示最慢的压缩方法(最佳压缩)。

-d, --decompress

解压缩给定的文件。

-h, --help

显示帮助消息。