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

本文介绍如何使用python-docx和deepdiff库读取并比较Word文档中的表格内容,演示了从简单单列表格到复杂双列表格的对比过程。

最近想对某些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://www.cnblogs.com/program-in-chinese/p/10500103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值