您现在的位置是:首页 > 文章详情

[日常]用Python读取word文档中的表格并比较

日期:2019-05-08点击:655

最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-docx - python-docx 0.8.7 documentation

演示如下. 两个简单的word文档, 各有一个表格:
2018_10_04_docx__

读取文档中的表格到列表(为演示只对单列表格操作):

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也提供两个字典间的比较. 双列表文件演示:
2018_10_04_docx__

读取双列表到字典后, 进行比较:

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'}}}

源码在: program-in-chinese/house_of_10000_business

原文链接:https://yq.aliyun.com/articles/701744
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章