003. Python 操作 ZIP 标准库:zipfile
ZIP 文件格式是一个常用的归档与压缩标准,在 Windows、Linux、MacOS 等多种操作系统中都有原生支持。Python 标准库提供了 zipfile
模块,可以用来操作 ZIP 文件,提供了创建、打开、读取、写入、添加及列出 ZIP 文件的工具。
优点:
功能强大:
zipfile
库提供了丰富的接口,可以方便地操作 ZIP 格式压缩文件。使用方便:
zipfile
库是 Python 标准库,开箱即用,文档齐全。速度较快:关键部分代码使用 C 实现,速度高于原生 Python。
大文件支持:它可以处理使用 ZIP64 扩展(超过 4 GB 的 ZIP 文件)的 ZIP 文件。
缺点:
不支持分卷文件:截止目前(Python 3.11),不能处理分卷 ZIP 文件。
不支持加密:支持解密 ZIP 归档中的加密文件,但是目前不能创建一个加密的文件。
解密很慢:解密非常慢,因为它是使用原生 Python 而不是 C 实现的。
使用(Python 3.10.0)
1.创建
首先,需要先创建测试文件夹与文件:
再将多个文件压缩到一个 ZIP 文件中:
添加压缩文件方法为 zipfile.write(filename[, arcname[, compress_type]]),acrname 是压缩文件中该文件的名字,默认情况下和 filename 一样。compress_type 的存在是因为 ZIP 文件允许被压缩的文件可以有不同的压缩类型。
2.读取
与创建 ZIP 文件类似,仅需将 zipfile.ZipFile 的第二个参数 mode 改为 'r' 即可。mode 和一般的文件操作一样,'r' 表示打开一个存在的只读 ZIP 文件;'w' 表示清空并打开一个只写的 ZIP 文件,或创建一个只写的 ZIP 文件;'a' 表示打开一个 ZIP 文件,并添加内容。一般使用上下文管理器方式打开 ZIP 文件,使用:
读取 ZIP 中文件:
3.校验
使用 zipfile.is_zipfile(filename) 函数来检测一个文件是否为 ZIP 文件。根据文件的 Magic Number(ZIP 文档开头为[PK] ,源于ZIP之父 Phil Katz 名字的首字母),如果是一个有效的 ZIP 文件则返回 True
,否则返回 False
。
如果需要进一步检测 ZIP 文件的内部结构是否正确,还可以先打开 ZIP 文件,再使用 testzip
方法来检测 ZIP 文件中是否有损坏的文件。
该方法会读取 ZIP 中的所有文件并检查它们的 CRC 和文件头。如果 ZIP 文件中有损坏的文件, 会返回第一个已损坏文件名称。如果 ZIP 文件完整无损,则会返回 None
。
4.提取
zipfile 中提供了便捷的接口,可以方便快捷地从 ZIP 文件中提取所需的文件:
当然,zipfile 还有不少其他方法,但用途有限,就不一一列举了。
以上,完结撒花!

延伸阅读
Python 标准库 zipfile:https://docs.python.org/zh-cn/3/library/zipfile.html
Python Zipfile:https://zhuanlan.zhihu.com/p/301257655