Python zipfile模块核心原理与实战操作指南
本文深入解析Python内置zipfile模块,重点介绍ZipFile与ZipInfo两大核心类的用法。涵盖读取压缩包列表、获取文件元数据、提取指定文件内容以及创建新压缩包等完整流程。特别演示如何通过write方法的第二个参数实现压缩时路径重命名,帮助开发者高效处理ZIP格式文件。
zipfile模块概述与核心类介绍
zipfile是Python标准库中用于处理ZIP格式压缩文件的模块,支持压缩与解压操作。鉴于ZIP格式的广泛普及性,该模块在实际开发中的应用频率极高。
该模块主要包含两个关键类:ZipFile和ZipInfo。在绝大多数常规应用场景下,开发者仅需使用这两个类即可完成主要操作。
ZipFile是核心处理类,负责执行zip文件的创建与读取任务。
ZipInfo类用于存储压缩包内各个文件的详细元数据信息。
读取ZIP文件:获取文件列表与元数据
假设变量filename指向一个现有的zip文件路径,以下示例展示如何读取该压缩包:
import zipfile
z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件
for f in z.namelist():
print f
上述代码旨在提取zip包内所有文件的名称列表。调用z.namelist()方法将返回包含压缩包内所有文件名的列表。
接下来展示另一种读取方式:
import zipfile
z = zipfile.ZipFile(filename, 'r')
for i in z.infolist():
print i.file_size, i.header_offset
此处使用了z.infolist()方法,其返回值是包含压缩包内所有文件信息的ZipInfo对象列表。每个ZipInfo对象封装了一个文件的详细信息,其中常用的属性包括filename(文件名)、file_size(文件大小)以及header_offset(文件数据在压缩包中的偏移量)。值得注意的是,前文提到的z.namelist()实际上就是提取了ZipInfo对象中的filename属性并组装成列表返回。
提取文件与创建压缩包的操作
从压缩包中提取单个文件的方法依赖于ZipFile类的read方法:
import zipfile
z = zipfile.ZipFile(filename, 'r')
print z.read(z.namelist()[0])
执行上述代码即可读取z.namelist()返回列表中的第一个文件内容,并将其输出至屏幕。当然,开发者也可选择将读取到的数据写入本地文件进行保存。
以下是创建新的zip压缩包的示例代码:
创建压缩包的操作逻辑与读取过程类似:
import zipfile, os
z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名字
#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件):
if os.path.isdir(testdir):
for d in os.listdir(testdir):
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"),即可在压缩时指定文件在包内的新路径。
以上内容涵盖了zipfile模块的核心用法,希望对读者的学习与实践提供帮助,欢迎继续支持本站获取更多技术资讯。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













