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)
相关推荐
1-1=05 分钟前
Python3 开发环境
python
miofly22 分钟前
GitHub 今日推荐|MOSS-Image:靠坐标框精确控制文字排版的图像生成模型
python·开源·github
Tiandaren23 分钟前
么是agent、为什么要做agent、怎么做agent、怎么工程化
人工智能·python·深度学习·大模型
张张123y1 小时前
后端第十一课:RAG 落地实战(从 0 到 1 接上私有知识库,并设计一个好用的 RAG)
开发语言·人工智能·python·机器学习·fastapi·rag
golang学习记1 小时前
Python vs Go:2026年到底该怎么选
java·vscode·python·golang·pycharm·goland
江厌011 小时前
移动工作站还是塔式?用三个数判断工位形态,再谈配置
python·移动工作站·塔式工作站·工作站选型·isv认证
川石课堂软件测试1 小时前
涨薪技术|0到1学会性能测试第8课-Analysis分析图
服务器·数据库·python·sql·jmeter·mysql·容器
学编程的小程1 小时前
服务器日志太分散不好查?我用Promtail+Loki+Grafana把采集、查询和分析串起来了
服务器·python·grafana
云水初2 小时前
【项目篇】基于LanGraph的自动处理客服邮件的 Agent汇总
开发语言·笔记·python·学习·fastapi·langgraph