内容目录
原文链接:http://www.juzicode.com/python-module-zipfile
Python的zipfile模块是标准库中用于处理ZIP压缩文件的工具,提供了创建、读取、写入和提取ZIP文件的功能,支持密码保护、多种压缩算法和跨平台操作。
应用场景
- 批量文件压缩与解压缩
- 自动化备份与归档
- Web应用中的文件打包下载
- 数据分析前的压缩文件处理
- 软件安装包的制作
- 加密存储敏感文件
模块导入
import zipfile
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
基本使用方法
1)创建ZIP文件
# juzicode.com/VX公众号:juzicode
import zipfile
# 创建新ZIP文件并添加文件
with zipfile.ZipFile('example.zip', 'w', compression=zipfile.ZIP_DEFLATED) as zipf:
zipf.write('file1.txt') # 添加单个文件
zipf.write('file2.log') # 添加另一个文件
print("ZIP文件创建成功")
运行结果:在当前目录生成包含file1.txt和file2.log的example.zip文件

2)读取ZIP文件内容
# juzicode.com/VX公众号:juzicode
import zipfile
# 读取ZIP文件内容
with zipfile.ZipFile('example.zip', 'r') as zipf:
# 打印ZIP文件中的所有文件列表
print("ZIP文件内容:")
for file_info in zipf.infolist():
print(f"文件名: {file_info.filename}, 大小: {file_info.file_size}字节")
# 读取特定文件内容
with zipf.open('file1.txt') as f:
content = f.read().decode('utf-8')
print("\nfile1.txt内容:\n", content)
运行结果:输出ZIP文件内容列表和指定文件内容

3)解压ZIP文件
# juzicode.com/VX公众号:juzicode
import zipfile
import os
# 创建解压目录
os.makedirs('extracted_files', exist_ok=True)
# 解压整个ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
zipf.extractall('extracted_files')
print("文件解压成功,请查看extracted_files目录")
运行结果:在extracted_files目录下生成解压后的文件
4)向现有ZIP添加文件
# juzicode.com/VX公众号:juzicode
import zipfile
# 以追加模式打开ZIP文件
with zipfile.ZipFile('example.zip', 'a') as zipf:
zipf.write('additional_file.pdf')
print("文件添加成功")
运行结果:在example.zip中添加additional_file.pdf

5)检查ZIP文件完整性
# juzicode.com/VX公众号:juzicode
import zipfile
def check_zip_integrity(zip_path):
"""检查ZIP文件是否损坏"""
try:
with zipfile.ZipFile(zip_path) as zipf:
# 测试ZIP文件是否有效
bad_file = zipf.testzip()
if bad_file is None:
print("ZIP文件完整无损坏")
else:
print(f"损坏文件: {bad_file}")
except zipfile.BadZipFile:
print("ZIP文件已损坏或格式不正确")
# 使用示例
check_zip_integrity('example.zip')
运行结果:验证ZIP文件完整性
高级功能
1)自定义压缩级别
# juzicode.com/VX公众号:juzicode
import zipfile
import zlib
# 使用不同压缩级别
with zipfile.ZipFile('compressed.zip', 'w') as zipf:
# 存储模式(不压缩)
zipf.write('file1.txt', compress_type=zipfile.ZIP_STORED)
# 默认压缩级别
zipf.write('file2.txt', compress_type=zipfile.ZIP_DEFLATED)
# 最高压缩级别
zipf.write('file3.txt', compress_type=zipfile.ZIP_DEFLATED, compresslevel=9)
print("不同压缩级别的ZIP文件创建完成")
2)处理ZIP文件注释
# juzicode.com/VX公众号:juzicode
import zipfile
# 添加ZIP文件注释
with zipfile.ZipFile('with_comment.zip', 'w') as zipf:
zipf.write('readme.txt')
zipf.comment = b'This is a ZIP file comment'
# 读取ZIP文件注释
with zipfile.ZipFile('with_comment.zip', 'r') as zipf:
print("ZIP文件注释:", zipf.comment.decode('utf-8'))
运行结果:
ZIP文件注释: This is a ZIP file comment
3)处理大型ZIP文件
# juzicode.com/VX公众号:juzicode
import zipfile
import os
def process_large_zip(zip_path, extract_to):
"""处理大型ZIP文件,避免内存问题"""
with zipfile.ZipFile(zip_path) as zipf:
for file in zipf.namelist():
# 逐个提取文件
zipf.extract(file, extract_to)
print(f"已处理: {file}")
print("大型ZIP文件处理完成")
# 使用示例
process_large_zip('large_files.zip', 'extracted_large_files')
运行结果:逐个处理大ZIP文件中的内容,避免内存溢出
总结
zipfile模块核心优势:
- Python标准库内置,无需额外安装
- 支持多种压缩算法和加密方式
- 提供完整的ZIP文件操作API
- 支持上下文管理器,安全可靠
注意事项:
- 加密功能使用传统PKZIP加密,安全性有限
- 处理超大文件时需考虑内存使用
- 某些高级ZIP特性可能不受支持
- 跨平台路径处理需注意分隔符差异