2018-10-04 [日常]用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'}}}
源码在: program-in-chinese/house_of_10000_business
2018-10-04 [日常]用Python读取word文档中的表格并比较的更多相关文章
- Python读取word文档(python-docx包)
最近想统计word文档中的一些信息,人工统计的话...三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.read ...
- Python读取word文档内容
1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...
- 使用Java POI来选择提取Word文档中的表格信息
通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...
- C# 在word文档中复制表格并粘帖到下一页中
C# 在word文档中复制表格并粘帖到下一页中 object oMissing = System.Reflection.Missing.Value; Microsoft.Offi ...
- python读取word文档
周末需要做一个统计word文档字数的问题,刚开始以为很简单,因为之前做过excel表格相关的任务,所以认为利用扩展模块应该比较简单. 通过搜索,确实搜到了一个python操作word的模块,pytho ...
- C#读取word文档中的内容
原文地址 http://blog.csdn.net/yhrun/article/details/7674540 在使用前需要添加引用巨硬的com组件:Microsoft Word 12.0 objec ...
- [java 2019-04-09] 代码生成word文档中的表格嵌套问题
public static void createContent3(Date adtStart, Date adtEnd, Map<String, Object> aMap,Map< ...
- 将表格添加到Word文档中 ,包括表格样式设置
创建 Table 对象并设置其属性 在您将表格插入文档之前,必须创建 Table 对象并设置其属性. 要设置表格的属性,请创建TableProperties对象并为其提供值. TablePropert ...
- 使用NPOI读取Word文档内容并进行修改
前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...
随机推荐
- Python - 使用objgraph生成对象引用关系图
1- objgraph简介 HomePage:https://mg.pov.lt/objgraph/ PyPI:https://pypi.org/project/objgraph/ 一般用于分析pyt ...
- IntelliJ IDEA如何设置新建类时,自动注释作者信息和日期时间
本文提供两种注释风格供参考. 风格1:简约Style 效果如下: 设置步骤: File--> Settings--> Editor--> File and Code Template ...
- css笔记详解(1)
css讲解 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 首先在我们学习css之前先来思考一个问题,为什么html标签上不直接 ...
- [Jenkins]Console Output中文显示问号的问题解决
------------------------------------------------------ 如需转载,请注明出处. 文章链接:https://www.cnblogs.com/dzbl ...
- Servlet JSP 二重修炼:Filter过滤器
摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 真正的朋友就是,当你蒙蔽了所有人的眼睛,也能看穿你真实的样子和心底的痛楚 ...
- TCP传输
看过太多tcp相关文章,但是看完总是不过瘾,似懂非懂,反复考虑过后,我觉得是那些文章太过理论,看起来没有体感,所以吸收不了. 希望这篇文章能做到言简意赅,帮助大家透过案例来理解原理. tcp的特点 这 ...
- zookeeper服务发现实战及原理--spring-cloud-zookeeper源码分析
1.为什么要服务发现? 服务实例的网络位置都是动态分配的.由于扩展.失败和升级,服务实例会经常动态改变,因此,客户端代码需要使用更加复杂的服务发现机制. 2.常见的服务发现开源组件 etcd—用于共享 ...
- 你真的懂redis的数据结构了吗?redis内部数据结构和外部数据结构揭秘
Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结 ...
- keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!
前言 开心一刻 医院里,一母亲带着小女孩打针.小女孩:“妈妈我不想打针,疼!”妈妈:“宝贝儿听话,这里这么多护士阿姨,咱们找个打针不疼的.”小女孩:“那哪个阿姨打针不疼呢?”妈妈:“妈妈也不知道,咱们 ...
- Mysql加锁过程详解(2)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...