夜雨聆风学习资料网

ARTICLE · 1009527

Python开发从零开始-50.59-Office 文档处理

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 文件‌的相关知识。

相关学习资料