【Python】zipfile模块全方位指南:创建、读取、写入、解压与操作ZIP压缩文件
Python 中的 zipfile 模块提供了用于创建、读取、写入、解压和操作 .zip 压缩文件的功能。通过这个模块,您可以轻松地进行文件压缩和解压缩,处理 .zip 文件格式。
1. zipfile 模块常用类和函数
1.1 zipfile.ZipFile 类
ZipFile 类是 zipfile 模块的核心类,提供了对 .zip 文件的操作方法。你可以使用这个类来创建、读取和修改 .zip 文件。
构造函数:
zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)
file:指定要打开的 .zip 文件的路径,或者一个类文件对象。mode:文件打开模式,常见的模式有:
'r':读取模式(默认)。'w':写入模式(如果 .zip 文件已存在,会覆盖)。'a':追加模式。compression:指定压缩方法,常用的有 ZIP_STORED(无压缩)和 ZIP_DEFLATED(压缩)。默认是 ZIP_DEFLATED。allowZip64:是否允许 .zip 文件超过 2GB。默认 True。2. 压缩文件
2.1 创建新的 .zip 文件
可以使用 ZipFile 类创建一个新的 .zip 文件并添加文件。
import zipfile
# 创建一个新的 ZIP 文件
with zipfile.ZipFile("example.zip", "w") as zipf:
zipf.write("file1.txt") # 将文件添加到压缩文件中
zipf.write("file2.txt")
2.2 向现有 .zip 文件追加内容
如果文件已经存在,并且你想要向其中添加新的文件,可以使用 'a' 模式。
import zipfile
# 向已存在的 ZIP 文件添加文件
with zipfile.ZipFile("example.zip", "a") as zipf:
zipf.write("file3.txt")
2.3 压缩多个文件
你也可以使用 writestr() 方法将内容直接写入 .zip 文件,而无需先保存为实际的文件。
import zipfile
with zipfile.ZipFile("example.zip", "w") as zipf:
zipf.writestr("file1.txt", "Hello, World!") # 将内容写入文件
zipf.writestr("file2.txt", "Python ZipFile Example")
3. 解压文件
3.1 解压 .zip 文件中的所有文件
使用 ZipFile 对象的 extractall() 方法可以将 .zip 文件中的所有文件提取到指定目录。
import zipfile
# 解压所有文件到当前目录
with zipfile.ZipFile("example.zip", "r") as zipf:
zipf.extractall() # 提取到当前工作目录
# 如果想解压到指定的目录
with zipfile.ZipFile("example.zip", "r") as zipf:
zipf.extractall("output_directory")
3.2 解压单个文件
如果只想提取 .zip 文件中的某一个文件,可以使用 extract() 方法。
import zipfile
# 解压特定文件
with zipfile.ZipFile("example.zip", "r") as zipf:
zipf.extract("file1.txt", "output_directory")
4. 查看 .zip 文件内容
4.1 列出 .zip 文件中的所有文件
使用 ZipFile 对象的 namelist() 方法可以获取 .zip 文件中包含的所有文件名。
import zipfile
with zipfile.ZipFile("example.zip", "r") as zipf:
print(zipf.namelist()) # 输出 ZIP 文件中所有文件的文件名列表
4.2 获取文件信息
你可以使用 ZipFile 对象的 getinfo() 方法获取文件的详细信息,例如文件大小和修改日期。
import zipfile
with zipfile.ZipFile("example.zip", "r") as zipf:
info = zipf.getinfo("file1.txt")
print(info) # 输出该文件的详细信息
5. 读取 .zip 文件中的内容
5.1 读取文件内容
你可以通过 ZipFile 对象的 open() 方法打开 .zip 文件中的某个文件,并读取其内容。
import zipfile
with zipfile.ZipFile("example.zip", "r") as zipf:
with zipf.open("file1.txt") as f:
content = f.read()
print(content.decode()) # 输出文件内容(假设是文本文件)
6. 其他常用方法
6.1 ZipFile.testzip()
检查 .zip 文件中的文件是否有损坏。若没有损坏,返回 None,如果有损坏,返回第一个损坏文件的名字。
import zipfile
with zipfile.ZipFile("example.zip", "r") as zipf:
result = zipf.testzip()
if result is None:
print("ZIP file is OK")
else:
print(f"Corrupted file: {result}")
6.2 ZipFile.close()
关闭 .zip 文件。虽然可以通过 with 语句自动管理文件的打开和关闭,但如果没有使用 with,则需要手动调用 close()。
import zipfile
zipf = zipfile.ZipFile("example.zip", "w")
zipf.close() # 手动关闭文件
7. zipfile 模块中常见的压缩方法
ZIP_STORED:无压缩(存储)。ZIP_DEFLATED:使用 DEFLATE 算法进行压缩(常见的压缩方法)。ZIP_BZIP2:使用 bzip2 压缩(较少使用)。ZIP_LZMA:使用 LZMA 压缩(较少使用)。示例:使用 ZIP_DEFLATED 压缩
import zipfile
with zipfile.ZipFile("example.zip", "w", compression=zipfile.ZIP_DEFLATED) as zipf:
zipf.write("file1.txt")
zipf.write("file2.txt")
总结
zipfile 模块为处理 .zip 压缩文件提供了非常便捷的方法。你可以用它来压缩文件、解压文件、读取文件内容、查看 .zip 文件中的文件列表等。它的功能非常全面,能够满足大多数日常的文件压缩和解压需求。
作者:彬彬侠