【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
文件中的文件列表等。它的功能非常全面,能够满足大多数日常的文件压缩和解压需求。
作者:彬彬侠