详解Python模块zipfile

2023-10-06 16:37

的原理和使用 zipfile在python中用于压缩和解压zip格式编码。由于它是一种很常见的zip格式,所以这个模块使用得比较频繁

zipfile中有两个非常重要的类,分别是ZipFile和ZipInfo。大多数情况下,我们只需要使用这两个类即可。

ZipFile 是用于创建和读取 zip 文件的主类

ZipInfo 是存储 zip 文件的每个文件的信息。

例如,如果要读取zip文件,假设filename是文件的路径:

导入压缩文件
z = zipfile.ZipFile(filename, 'r') # 这里第二个参数是r是读取zip文件,w是创建zip文件
对于 z.namelist() 中的 f:
  打印 f

上面的代码读取 zip 存档中所有文件的名称。 z.namelist() 将返回压缩包中所有文件名的列表。

看下一张:

导入压缩文件
z = zipfile.ZipFile(文件名, 'r')
对于 z.infolist() 中的 i:
  打印 i.file_size, i.header_offset
这里使用了

z.infolist(),它返回压缩包中所有文件的信息,是一个ZipInfo的列表。 ZopInfo 对象包含压缩包中文件的信息。比较常用的是filename、file_size、header_offset,分别是压缩包中文件数据的文件名、文件大小、偏移量。事实上,前面的 z.namelist() 读取了 ZopInfo 中的文件名并将其作为列表返回。

从压缩包中解压文件的方法是使用ZipFile的read方法:

导入压缩文件
z = zipfile.ZipFile(文件名, 'r')
print m.gsm-guard.net(z.namelist()[0])

这样就读取了z.namelist()中的第一个文件并输出到屏幕上。当然,也可以存储在文件中。

以下是创建 zip 存档的方法:

其实和读法很相似:

导入zip文件,操作系统

z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名称。

#假设要将某个testdir下的所有文件添加到压缩包中(这里只添加一级子目录下的文件):
如果 os.path.isdir(testdir):
  对于 os.listdir(testdir) 中的 d:
    z.write(testdir+os.sep+d)
# 必须调用 close()!
z.close()

上面的代码非常简单。

思考另一个问题。如果我在压缩包中添加一个test/111.txt,然后我希望将其作为test22/111.txt放在包中怎么办?

其实这就是ZipFile的write方法中第二个参数的作用。就像这样调用它: z.write("test/111.txt", "test22/111.txt")