12.2. gzip — 支持 gzip 文件 — Python 文档
12.2. 压缩包 - 支持压缩包档案
该模块提供了一个简单的接口来压缩和解压缩文件,就像 GNU 程序 gzip 和 gunzip 一样。
数据压缩由 zlib 模块提供。
gzip 模块提供了 GzipFile 类,该类以 Python 的文件对象为模型。 GzipFile 类读取和写入 gzip 格式的文件,自动压缩或解压缩数据,使其看起来像一个普通的文件对象。
请注意,可以由 gzip 和 gunzip 程序解压缩的其他文件格式,例如由 compress 和 pack 生成的文件格式,是此模块不支持。
该模块定义了以下项目:
- class gzip.GzipFile([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])
GzipFile 类的构造函数,该类模拟文件对象的大部分方法,
readinto()
和truncate()
方法除外。 fileobj 和 filename 中的至少一个必须被赋予一个非平凡的值。新的类实例基于 fileobj,它可以是普通文件、StringIO 对象或任何其他模拟文件的对象。 它默认为
None
,在这种情况下,打开 filename 以提供文件对象。当 fileobj 不是
None
时,filename 参数仅用于包含在 gzip 文件头中,其中可能包含原始文件名未压缩的文件。 如果可识别,则默认为 fileobj 的文件名; 否则,它默认为空字符串,在这种情况下,原始文件名不包含在标题中。mode 参数可以是
'r'
、'rb'
、'a'
、'ab'
、'w'
或 [ X99X],取决于文件将被读取还是写入。 如果可识别,则默认为 fileobj 的模式; 否则,默认为'rb'
。 如果没有给出,'b' 标志将被添加到模式中以确保文件以二进制模式打开以实现跨平台可移植性。compresslevel 参数是一个从
0
到9
的整数,控制压缩级别;1
最快,产生的压缩最少,9
最慢,产生的压缩最多。0
是无压缩。 默认值为9
。mtime 参数是压缩时要写入流的可选数字时间戳。 所有 gzip 压缩流都需要包含时间戳。 如果省略或
None
,则使用当前时间。 该模块在解压时忽略时间戳; 但是,某些程序,例如 gunzip,会使用它。 时间戳的格式与time.time()
的返回值和os.stat()
返回的对象的st_mtime
属性的格式相同。调用 GzipFile 对象的
close()
方法不会关闭 fileobj,因为您可能希望在压缩数据后附加更多材料。 这也允许您传递一个 StringIO 对象作为 fileobj 打开,并使用 StringIO 对象的 getvalue()[ X188X] 方法。2.7 版更改: 添加了对 with 语句的支持。
2.7 版更改: 添加了对零填充文件的支持。
2.7 版新功能: mtime 参数。
- gzip.open(filename[, mode[, compresslevel]])
- 这是
GzipFile(filename,
mode,
compresslevel)
的简写。 filename 参数是必需的; mode 默认为'rb'
,compresslevel 默认为9
。
12.2.1. 使用示例
如何读取压缩文件的示例:
import gzip
with gzip.open('file.txt.gz', 'rb') as f:
file_content = f.read()
如何创建压缩 GZIP 文件的示例:
import gzip
content = "Lots of content here"
with gzip.open('file.txt.gz', 'wb') as f:
f.write(content)
如何 GZIP 压缩现有文件的示例:
import gzip
import shutil
with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)