Python zipfile模块实战:ZIP文件创建、解压与加密管理

程一诺
程一诺
发布时间:2026-10-12| 3人浏览过
原创

本文详细讲解如何使用Python内置的zipfile模块处理ZIP文件,涵盖基础文件打包、目录递归压缩、数据解压提取、元数据读取及添加注释的方法。同时介绍针对敏感文件的AES加密方案与BadZipFile异常拦截技巧,帮助开发者高效安全地管理归档任务。

环境准备与基础导入

zipfile模块属于Python标准库,开箱即用,无需通过pip额外安装。在使用前只需在脚本头部引入该模块:

import zipfile
import os

构建ZIP归档包

创建压缩包的核心在于使用zipfile.ZipFile类打开一个目标文件,并以写模式'w'进入上下文管理器。根据需求选择是否开启默认压缩算法。

第1步:打包独立文件

适用场景:快速将当前工作区的单个或少量文件合并到一个归档中。

import zipfile

with zipfile.ZipFile('example.zip', 'w', zipfile.ZIP_DEFLATED) as myzip:
    myzip.write('report.txt')
    myzip.write('config.yaml')

第2步:递归压缩整个文件夹

目的:遍历目标目录及其所有子目录,将文件按相对路径无损写入ZIP,保持原有层级结构。

def zip_folder(src_dir, dest_zip):
    with zipfile.ZipFile(dest_zip, 'w', zipfile.ZIP_DEFLATED) as zf:
        for root, _, filenames in os.walk(src_dir):
            for filename in filenames:
                full_path = os.path.join(root, filename)
                # 计算相对于根目录的路径,避免ZIP内包含绝对路径
                arcname = os.path.relpath(full_path, src_dir)
                zf.write(full_path, arcname)

zip_folder('data_source', 'source_backup.zip')

解包提取与元数据查询

读取归档文件时,使用只读模式'r'进入上下文。模块支持批量提取或按条件检索。

第3步:将归档内容解压至指定目录

操作入口:调用extractall()方法。

with zipfile.ZipFile('source_backup.zip', 'r') as zf:
    # 解压到当前目录下的 output 文件夹
    zf.extractall('./output')
    # 如需逐个指定密码解压(仅适用于使用ZIPCRYPTO加密的文件)
    # zf.extract(filename, path, pwd=b'password')

第4步:读取压缩包内文件的详细信息

目的:在不解包的情况下,快速获取特定文件的体积变化与时间戳,常用于打包前后的校验对比。

with zipfile.ZipFile('source_backup.zip', 'r') as zf:
    info = zf.getinfo('report.txt')
    print(f"文件名: {info.filename}")
    print(f"原始大小: {info.file_size} 字节")
    print(f"压缩后大小: {info.compress_size} 字节")
    print(f"最后修改时间: {info.date_time}")

高级属性管理与安全防护

除了基础的增删改查,zipfile还支持为档案注入元数据,并对敏感数据进行传输级加密。

第5步:为压缩包及内部文件添加备注注释

压缩包整体备注直接修改comment属性;内部文件的备注则需要先获取对应文件的Info对象再进行赋值。

with zipfile.ZipFile('example.zip', 'a') as myzip:
    # 设置整个ZIP包的公共注释
    myzip.comment = b'Demo Archive v1.0'
    
    # 向内部新增一个字符串文件并附带注释
    myzip.writestr('readme.md', '# Usage\nThis is a test.', comment=b'Instructions note')

第6步:实施AES-128文件加密保护

在打包包含个人隐私或商业机密的数据时,启用AES加密可大幅提升安全性。需注意现代Python版本推荐使用关键字参数传入压缩类型,避免参数错位引发语法错误。

with zipfile.ZipFile('secure_archive.zip', 'w', zipfile.ZIP_AES128) as myzip:
    myzip.setpassword(b'StrongPassWord!')
    myzip.write('secret_data.xlsx')

⚠️ 风险提示:加密打包会略微增加CPU开销。强烈建议在执行覆盖写入或删除源文件前,先备份重要归档与待打包数据,防止因程序异常中断导致数据丢失。

第7步:拦截损坏归档的异常处理

网络下载或磁盘故障可能导致ZIP头损坏。通过捕获BadZipFile异常,可有效阻断程序崩溃并提供友好的降级反馈。

import zipfile

try:
    with zipfile.ZipFile('downloaded_data.zip', 'r') as zf:
        print(zf.namelist())
except zipfile.BadZipFile:
    print("警告:归档文件已损坏,无法解析ZIP结构。请重新获取资源。")

小结

掌握zipfile模块的上下文管理语法与核心API,能够大幅简化日常开发中的文件分发与日志归档流程。无论是处理数百个子目录的批量打包,还是对核心数据库配置进行带注释与加密的安全封装,内置库均能提供稳定高效的支撑。配合完善的异常捕获机制,即可构建出健壮的文件处理流水线。

以上就是Python zipfile模块实战:ZIP文件创建解压与加密管理的详细内容,更多关于Python文件归档处理与自动化运维的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。