ARTICLE · 1009527
Python开发从零开始-50.59-Office 文档处理
接上文Python开发从零开始-50.58-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。
4)解压 7z 文档
解压 7z 文档需要使用 'r' 模式打开(如果 7z 文档有密码,需要设置 password 参数),然后使用 SevenZipFile 对象的 extract() 方法(解压单个文件)或 extractall() 方法(解压所有文件)。
① 解压 7z 文档的所有文件
SevenZipFile 对象的extractall() 方法用于将 7z 文档中所有文档解压,该方法的原型为:
extractall(path=None, recursive=True, *, progress_callback=None, factory=None) |
参数解释:
path:可选,字符串类型,解压输出目标目录,默认值 None;
recursive:可选,布尔型,是否递归解压子目录,默认值 True 表示递归解压子目录;
progress_callback:可选,可调用对象(callable)类型,解压进度回调函数,用于监听解压进度、实现进度条,默认值 None;
factory:内部文件工厂对象,一般业务代码不需要使用,默认值 None;
返回值:无(NoneType)。
解压 7z 文档的所有文件的代码示例如下:
import py7zr# 解压普通 7z 文档with py7zr.SevenZipFile('example_imgs_7z.7z', mode='r') as f:# 全部解压 7z 文档到指定目录f.extractall(path='example_imgs_7z')# 解压加密 7z 文档with py7zr.SevenZipFile('example_imgs_7z_pwd.7z', mode='r', password='0123456789') as f:# 全部解压加密 7z 文档到指定目录f.extractall(path='example_imgs_7z_pwd')
代码执行后,7z 文档全部解压后目录结构如下图所示:

② 解压 7z 文档中的指定文档
SevenZipFile 对象的 extract() 方法用于将 7z 文档中指定文档解压,该方法的原型为:
extract(path=None, targets=None, recursive=True, *, progress_callback, factory) |
参数解释:
path:可选,字符串类型,解压输出目标目录,默认值 None;
targets:可选,集合类型(如列表、集合),指定要解压的文件名列表,默认值 None;如果需要提取 A 目录中的子文档,需要将 A 目录添加到 targets 中,并且一定要使用正斜杠 / 作为路径分隔符,例如:A 目录下有 x.docx、y.xlsx 和 z.pdf 三个子文档,如果提取其中的 x.docx 和 z.pdf 文档,targets 参数应设置为: ['A', 'A/x.docx', 'A/z.pdf'];
recursive:可选,布尔型,如果需要解压父目录下所有文档和子目录,只需将父目录加入 targets 中,并将 recursive 参数设置为 True 即可强制自动递归提取其所有子目录及其内容;如果父目录加入 targets 后未设置 recursive 参数,则默认为 False;
progress_callback:可选,可调用对象(callable)类型,解压进度回调函数,用于监听解压进度、实现进度条,默认值 None;
factory:内部文件工厂对象,一般业务代码不需要使用,默认值 None;
返回值:无(NoneType)。
解压 7z 文档中的指定文档的代码示例如下:
import py7zr# 解压普通 7z 文档with py7zr.SevenZipFile('example_imgs_7z.7z', mode='r') as f:# 解压 7z 文档中的指定文档到目标目录,注意一定要使用正斜杠 / 作为路径分隔符f.extract(path='example_imgs_7z_sig', targets=['source', 'source/1_1.png', 'source/2_1.png'])# 解压加密 7z 文档with py7zr.SevenZipFile('example_imgs_7z_pwd.7z', mode='r', password='0123456789') as f:# 解压加密 7z 文档的指定目录到目标目录,注意 recursive 设置为 True 可以递归解压,否则无法全部提取子目录和文档f.extract(path='example_imgs_7z_pwd_sig', targets=['source'], recursive=True)
代码执行后,解压 7z 文档中指定文档的目录结构如下图所示:

5)py7zr 库使用注意事项
py7zr 安装需要 C++ 编译环境,以及相关依赖包,所以直接安装可能报错,建议使用 whl 离线安装方式;
加密解密代码中,明文填写密码有泄露风险,建议从环境变量或密钥管理服务读取;
解压 7z 文档时,使用 extract() 方法一定注意:targets 参数的父级目录注意加入,路径分隔符使用正斜杠 /;提取指定目录所有子文档,需要显式指定 recursive 参数值为 True;
实际项目中,应使用 try / except 捕获处理异常,避免程序崩溃。
受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件的相关知识。