zipfile 是 Python 自带的标准库模块,用于创建、读取、写入和解压 ZIP 格式的压缩文件。它为开发者提供了操作 .zip 文件的便捷方式,无需借助外部解压软件或第三方库。

应用场景包括:

(1)打包多个文件或目录为一个 ZIP 文件。

(2)解压 ZIP 文件中的全部或部分内容。

(3)遍历压缩包内容,列出文件名、压缩比等信息。

(4)自动化数据归档、备份或传输处理。

  ◆  ◆

核心概念

1、zipfile.ZipFile 是操作 ZIP 文件的核心类,支持读取、写入和追加模式。

2、ZIP 格式是一种基于无损压缩的归档格式,可存储多个文件和子目录。

3、ZIP 文件内部可包含路径结构,但所有信息都存在于单个 .zip 文件中。

4、操作 ZIP 文件时建议使用 with 上下文管理,确保资源正确关闭。

5、zipfile 也支持读取压缩包中文件的字节内容和信息,但不支持修改压缩包中已有的文件(只能重新写一个新的)。

  ◆  ◆

应用举例

例 1:将多个文件打包为 ZIP 文件

import zipfile
# 创建一个新的 zip 文件with zipfile.ZipFile("archive.zip", mode="w") as zipf:    zipf.write("file1.txt")  # 添加文件1    zipf.write("file2.txt")  # 添加文件2

例 2:读取 ZIP 文件内容列表

import zipfile
with zipfile.ZipFile("archive.zip", mode="r") as zipf:    print(zipf.namelist())  # 输出压缩包中的所有文件名

例 3:解压所有文件到指定目录

import zipfile
with zipfile.ZipFile("archive.zip", mode="r") as zipf:    zipf.extractall(path="output")  # 解压到 output 目录

例 4:提取单个文件并读取内容

import zipfile
with zipfile.ZipFile("archive.zip", mode="r") as zipf:    data = zipf.read("file1.txt")  # 返回的是 bytes    print(data.decode("utf-8"))    # 解码为字符串

  ◆  ◆

常用函数速览

zipfile.ZipFile(filename, mode="r")

创建一个 ZipFile 对象(用于读/写/追加 ZIP 文件)。

参数:

filename:ZIP 文件名或类文件对象

mode:打开模式,常用为 "r"(读取)、"w"(新建)、"a"(追加)

返回:ZipFile 对象

zipfile.write(filename, arcname=None)

将文件添加进 ZIP 压缩包。

参数:

filename:要添加的本地文件路径

arcname:压缩包中显示的文件名或路径(默认为原文件名)

返回:无

zipfile.writestr(name, data)

将字符串或字节数据直接写入压缩包中(不依赖外部文件)。

参数:

name:压缩包内的文件名

data:要写入的字节或字符串内容(推荐使用 bytes)

返回:无

zipfile.extract(member, path=None)

将某个文件从 ZIP 包中解压到指定路径。

参数:

member:压缩包内的文件名

path:可选,目标文件夹(默认当前目录)

返回:解压后的文件路径

zipfile.extractall(path=None, members=None)

将 ZIP 包中的所有文件解压出来。

参数:

path:目标文件夹(默认当前目录)

members:要解压的文件列表(默认解压全部)

返回:无

zipfile.namelist()

返回压缩包中所有文件的名称(字符串列表)。

参数:无

返回:字符串列表

zipfile.read(name)

读取 ZIP 内部文件的字节内容。

参数:name 为压缩包内文件名

返回:字节数据(bytes 类型)

zipfile.infolist()

返回压缩包中每个文件的详细信息列表(ZipInfo 对象)。

参数:无

返回:包含 ZipInfo 对象的列表

zipfile.testzip()

测试 ZIP 文件中的数据是否完整。校验文件头和部分数据的 CRC。

参数:无

返回:若无错误,返回 None;否则,返回第一个出错文件的文件名字符串

  ◆  ◆

补充说明

1、ZIP 文件中的目录层级会根据写入时的路径结构自动构建。

2、写模式 "w" 会覆盖已有压缩文件,请谨慎使用。

3、若需支持密码保护 ZIP 文件或解压大文件,推荐使用第三方库如 pyzipper、zipfile36 等。

图片

“点赞有美意,赞赏是鼓励”

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐