python-docx -- 对比两个表格的行数据

文章目录

对比表格数据

  • 删除行
  • 新增行
  • 更新行
python 复制代码
# __author__ = "laufing"
from docx import Document


doc = Document("table.docx")

table_data = []
for table in doc.tables:
    for row in table.rows:
        table_data.append([cell.text for cell in row.cells])

print("table data:", table_data)


data1 = [ # m
    ['省份', '城市', '地区', '小区'],
    ['河南省', '郑州市', '东区', '碧桂园'],
    ['河北省', '天津市', '四环区', '瑞丰锦尚'],
    ['河北省', '未知市', '未知区', '0'],
    ['山西省', '晋城市', '长垣县', '0'],
]


data2 = [ # n
    ['省份', '城市', '地区', '小区'],
    ['河南省', '郑州市', '东区', '碧桂园'],
    ['河北省', '天津市', '四环区', '瑞丰锦尚'],
    # ['河北省', '未知市', '未知区', '0'],
    ['山西省', '晋城市', '长垣县', '0'],
    ['山西省', '未知市', '未知区', '0']
]
m = len(data1)
n = len(data2)
from difflib import SequenceMatcher
import numpy as np

# old -> new
matrix = np.zeros((m, n))
for i in range(m):
    seq1 = "".join(data1[i])
    for j in range(n):
        matrix[i][j] = SequenceMatcher(None, seq1, "".join(data2[j])).ratio()

# 表格1中的行 与 表格2中行的 最大相似度    达到1的未变化  (行文本之间有相似时,准确率下降)
data1_max_proba = np.max(matrix, axis=1)

# data1中删除的行   相似度 < 0.82   0.82 - 0.99 更新    >= 0.99 未变化
arr = np.argwhere(data1_max_proba < 0.82)
print("删除的行:", arr)


# 与基础数据 索引对应
data11 = [ # m
    ['省份', '城市', '地区', '小区'],
    ['河南省', '郑州市', '东区', '碧桂园'],
    ['河北省', '天津市', '四环区', '瑞丰锦尚'],
    ['', '未知市', '未知区', '0'], # 索引为3 删除
    ['山西省', '未知市', '未知区', '0']
]

data22 = [ # n
    ['省份', '城市', '地区', '小区'],
    ['河南省', '郑州市', '东区', '碧桂园'],
    ['河北省', '天津市', '四环区', '瑞丰锦尚'],
    # ['河北省', '未知市', '未知区', '0'],
    ['山西省', '晋城市', '长垣县', '0'],
    ['', '未知市', '未知区', '0']
]

# new -> old
matrix2 = np.zeros((n, m))
for i in range(n):
    seq2 = "".join(data2[i])
    for j in range(m):
        matrix2[i][j] = SequenceMatcher(None, seq2, "".join(data1[j])).ratio()

arr2 = np.max(matrix2, axis=1)
# 获取增加的行  相似度 < 0.82
arr2 = np.argwhere(arr2 < 0.82)
print("增加的行:", arr2)
相关推荐
m0_377618234 小时前
Golang怎么连接MySQL数据库_Golang MySQL连接教程【总结】
jvm·数据库·python
LN花开富贵4 小时前
【ROS】鱼香ROS2学习笔记一
linux·笔记·python·学习·嵌入式·ros·agv
weixin_586061464 小时前
C#怎么通过反射获取类属性_C#如何动态读取元数据【进阶】
jvm·数据库·python
Jurio.4 小时前
本机开发 + 多机执行的极简远端运行工具
linux·git·python·github·远程工作
skywalk81635 小时前
pytest测试的时候这是什么意思?Migrating <class ‘kotti.resources.File‘>
前端·python
overmind5 小时前
oeasy Python 121[专业选修]列表_多维列表运算_列表相加_列表相乘
java·windows·python
m0_678485455 小时前
CSS如何控制表格单元格边框合并_通过border-collapse实现
jvm·数据库·python
m0_748839495 小时前
如何用组合继承模式实现父类方法复用与子类属性独立
jvm·数据库·python
qq_334563555 小时前
PHP源码是否依赖特定芯片组_Intel与AMD平台差异【操作】
jvm·数据库·python
和小潘一起学AI6 小时前
numpy
numpy