On this page
12.2. gzip-支持 gzip 文件
源代码: Lib/gzip.py
该模块提供了一个简单的界面来压缩和解 zipfile,就像 GNU 程序 gzip 和 gunzip 一样。
数据压缩由zlib模块提供。
gzip模块提供了GzipFile类,该类以 Python 的文件对象为模型。 GzipFile类读取和写入 gzip 格式的文件,自动压缩或解压缩数据,使其看起来像普通的文件对象。
请注意,此模块不支持可以由 gzip 和 gunzip 程序解压缩的其他文件格式,例如 compress 和 pack 生成的文件格式。
该模块定义以下各项:
-
- class *
gzip.
GzipFile
([文件名 [,模式 [,压缩级别 [,* fileobj * [,* mtime *]]]]]])
- GzipFile类的构造函数,它模拟文件对象的大多数方法,但
readinto()
和truncate()
方法除外。必须为* fileobj 和 filename *中的至少一个赋予平凡的值。
- class *
新的类实例基于* fileobj ,该文件可以是常规文件,StringIO对象,也可以是模拟文件的任何其他对象。默认为None
,在这种情况下,将打开 filename *以提供文件对象。
如果* fileobj 不是None
,则 filename 参数仅用于包含在 gzip 文件头中,该文件头可能包含未 zipfile 的原始文件名。如果可以识别,则默认为 fileobj *的文件名;否则,它默认为空字符串,在这种情况下,原始文件名不包含在标题中。
mode 参数可以是
'r'
,'rb'
,'a'
,'ab'
,'w'
或'wb'
中的任何一个,具体取决于将读取还是写入文件。如果可以识别,则默认为 fileobj *模式;否则,默认值为'rb'
。如果未给出,则将'b'标志添加到该模式,以确保以二进制模式打开文件以实现跨平台可移植性。compresslevel *参数是从
0
到9
的整数,用于控制压缩级别;1
最快并产生最小的压缩,而9
最慢并产生最大的压缩。0
不压缩。默认值为9
。mtime *参数是压缩时要写入流中的可选数字时间戳。所有 gzip 压缩流都必须包含时间戳。如果Ellipsis或
None
,则使用当前时间。解压缩时,该模块将忽略时间戳;但是,某些程序(例如 gunzip )会使用它。时间戳的格式与time.time()
的返回值和os.stat()
返回的对象的st_mtime
属性的格式相同。
调用GzipFile对象的close()
方法不会关闭* fileobj ,因为您可能希望在压缩数据之后附加更多材料。这还允许您传递为写入而打开的StringIO对象为 fileobj *,并使用StringIO对象的getvalue()方法检索所得的内存缓冲区。
在 2.7 版中进行了更改:添加了对with语句的支持。
在 2.7 版中进行了更改:添加了对零填充文件的支持。
2.7 版的新Function:* mtime *参数。
gzip.
open
(* filename * [,* mode * [,* compresslevel *]])- 这是
GzipFile(filename,
mode,
compresslevel)
的简写。 * filename *参数是必需的; * mode 默认为'rb'
, compresslevel *默认为9
。
- 这是
12.2.1. 使用范例
如何读取 zipfile 的示例:
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)
See also
Module zlib
支持 gzip 文件格式所需的基本数据压缩模块。