[日常]用Python读取word文档中的表格并比较
最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-docx - python-docx 0.8.7 documentation
演示如下. 两个简单的word文档, 各有一个表格:
读取文档中的表格到列表(为演示只对单列表格操作):
import docx def 取表格(文件名): 文件 = docx.Document(文件名) 首个表 = 文件.tables[0] 值 = [] for 行 in 首个表.rows: for 格 in 行.cells: 值.append(格.text) print(文件名 + " -> " + str(值)) return 值 表1 = 取表格('表1.docx')
读取结果:
表1.docx -> ['值1', '值2', '值3']
接着找到这个做比较的python库seperman/deepdiff, 来源: Get difference between two lists
from deepdiff import DeepDiff 表1 = 取表格('表1.docx') 表2 = 取表格('表2.docx') print(DeepDiff(表1, 表2))
输出结果(为更可读, 已手动格式化):
{ 'values_changed': {'root[1]': {'new_value': '值2.5', 'old_value': '值2'} }, 'iterable_item_added': {'root[3]': '值4'} }
显示了修改的值和添加的值, 还挺好用. 实际的表格是两列, 需要按照某个键值作对比. 于是用字典, 正好DeepDiff也提供两个字典间的比较. 双列表文件演示:
读取双列表到字典后, 进行比较:
import docx from deepdiff import DeepDiff from pprint import pprint def 取表格(文件名): 文件 = docx.Document(文件名) 首个表 = 文件.tables[0] 值 = {} for 行 in 首个表.rows: 格 = 行.cells 值[格[0].text] = 格[1].text print(文件名 + " -> " + str(值)) return 值 表1 = 取表格('双列表1.docx') 表2 = 取表格('双列表2.docx') pprint(DeepDiff(表1, 表2), indent=2)
输出如下:
{ 'dictionary_item_added': {"root['键3']"}, 'values_changed': {"root['键2']": {'new_value': '值2.5', 'old_value': '值2'}}}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用Python3和tkinter开发简单图形界面程序
源码库: program-in-chinese/wubi_code_editor 起因在这里. 由于此项目和汉字相关, 个人也想尝试Python的图形界面开发, 于是开始尝试. 遇到的一个坑. 用户测试时, 发现png图片加载不了, 后发现是由于tkinter版本问题: Tkinter.PhotoImage doesn't not support png image 现在还处于原型状态, 两百多行代码都在一个文件中. 几个主要问题: 界面需要分离, 与界面无关的部分需要添加测试用例 文件路径只支持Linux/Mac, 还需支持Windows, 参考: Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux 完善功能: 支持对缺失数据的添加, 按编码范围导出到不同文件(出处); 按字搜索; 笔顺数据; Unicode 编码区 在VS code下开发, 还没使用测试/调试相关功能. 参考: Python in Visual Studio Code 源码节选: 读入csv源数据: d...
- 下一篇
Java源码英翻中进展-内测上线
创建了一个子域名: http://translate.codeinchinese.com/ 欢迎试用, 如有建议/发现问题欢迎在此拍砖: program-in-chinese/code_translator_service. 服务器硬件配置见前文: 中文代码之Spring Boot添加基本日志 功能上, 续前文Java源码英翻中网页演示, 做了一点改进: 对类型中的字段进行翻译(比如上图中的visitedCountries翻译为'拜访国家') 短期内需改进: 术语词典. 比如上面的long, 现在直译为'长', 需要改进为比如'长整型'. 还有serialVersionUID, 还需通过添加内置字典修正. Java源码翻译库相关源码 static void 翻译字段(JavaClassSource 类结构) { List<FieldSource<JavaClassSource>> 字段 = 类结构.getFields(); for (FieldSource<JavaClassSource> 某字段 : 字段) { String 字段名 = 某字段.g...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装