最近想对某些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文档中的表格并比较的更多相关文章

  1. Python读取word文档(python-docx包)

    最近想统计word文档中的一些信息,人工统计的话...三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.read ...

  2. Python读取word文档内容

    1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...

  3. 使用Java POI来选择提取Word文档中的表格信息

    通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...

  4. C# 在word文档中复制表格并粘帖到下一页中

    C# 在word文档中复制表格并粘帖到下一页中 object oMissing = System.Reflection.Missing.Value;            Microsoft.Offi ...

  5. python读取word文档

    周末需要做一个统计word文档字数的问题,刚开始以为很简单,因为之前做过excel表格相关的任务,所以认为利用扩展模块应该比较简单. 通过搜索,确实搜到了一个python操作word的模块,pytho ...

  6. C#读取word文档中的内容

    原文地址 http://blog.csdn.net/yhrun/article/details/7674540 在使用前需要添加引用巨硬的com组件:Microsoft Word 12.0 objec ...

  7. [java 2019-04-09] 代码生成word文档中的表格嵌套问题

    public static void createContent3(Date adtStart, Date adtEnd, Map<String, Object> aMap,Map< ...

  8. 将表格添加到Word文档中 ,包括表格样式设置

    创建 Table 对象并设置其属性 在您将表格插入文档之前,必须创建 Table 对象并设置其属性. 要设置表格的属性,请创建TableProperties对象并为其提供值. TablePropert ...

  9. 使用NPOI读取Word文档内容并进行修改

    前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...

随机推荐

  1. C++ Opencv HoughLines()用霍夫变换在二元图像中寻线

    一.霍夫变换简介 参考http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm 二.HoughLines()函数详解 该函数接受的输入矩阵只能是8位单通道的二 ...

  2. 空手套白狼,硬阅java字节码class文件

    如下,是一些java字节码也就是原始的class文件,当应用部署到线上之后,我们能够看到的也就是这样的字样了.那么怎样解呢?就让我们一起,来解读解读字节码吧! Offset A B C D E F C ...

  3. python中numpy.ndarray.shape的用法

    今天用到了shape,就顺便学习一下,这个shape的作用就是要把矩阵进行行列转换,请看下面的几个例子就明白了: >>> import numpy as np >>> ...

  4. python基础-字符串(6)

    一.引言 当打来浏览器登录某些网站的时候,需要输入密码,浏览器把密码传送到服务器后,服务器会对密码进行验证,其验证过程是把之前保存的密码与本次传递过去的密码进行对比,如果相等,那么就认为密码正确,否则 ...

  5. JavaScript变量转换

    JavaScript变量转换 目录 自动转换 (1)Number与Boolean (2)Number与String (3)String与Boolean (4)null的自动转换 (5)undefine ...

  6. IDEA整合Junit详细步骤

    一.添加Junit插件. 1.file-->setting-->plugins-->搜索Junit-->安装插件(一般已默认安装,无需手动安装). 二.设置Junit测试参数: ...

  7. HTML5拍照、摄像机功能实战

    HTML5拍照.摄像机功能实战 苏格团队 作者:Tomey 开篇 最近在做一个chrome app的云相机应用,应用包括拍照.摄像.保存照片视频.上传文件等等核心功能,其中涉及到很多HTML5对媒体流 ...

  8. 使用以下映射将包含A-ZIS的字母的消息编码为数字:'A' - > 1,'B' - > 2 ...'Z' - > 26 给定包含数字的编码消息,确定解码方式的总数(python)(原创)

    题目:有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'.现在给一串数字,给出有多少种可能的译码结果. 实现逻辑: 1,使用队列的数据类型,每一 ...

  9. 课程回顾-Convolutional Neural Networks

    为什么卷积层计算量更低paddingStrided convolution多维卷积LeNet 参数卷积网络的好处参数共享稀疏连接经典网络实现LeNet-5AlexNetVGGResNet残差块iden ...

  10. PHP取得json前面有乱码(去除文件头部BOM)

    curl请求接口时,返回结果如下: {} 想把json转换成数组或者对象,但是用json_decode返回是空的,然后用var_dump打印了一下返回结果,发现结果如下: ) 发现前面多了两个字符,因 ...