欢迎光临散文网 会员登陆 & 注册

003. Python 操作 ZIP 标准库:zipfile

2023-01-04 12:26 作者:姚千山  | 我要投稿

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 还有不少其他方法,但用途有限,就不一一列举了。

以上,完结撒花!

延伸阅读

  1. Python 标准库 zipfile:https://docs.python.org/zh-cn/3/library/zipfile.html

  2. Python Zipfile:https://zhuanlan.zhihu.com/p/301257655


003. Python 操作 ZIP 标准库:zipfile的评论 (共 条)

分享到微博请遵守国家法律