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)
相关推荐
小陈工5 分钟前
2026年3月26日技术资讯洞察:WebAssembly崛起、AI代码质量危机与开源安全新挑战
人工智能·python·安全·架构·开源·fastapi·wasm
2401_8796938727 分钟前
数据分析与科学计算
jvm·数据库·python
明月_清风1 小时前
宿命的对决:深度对比 JavaScript 与 Python 的异步进化论
后端·python
明月_清风1 小时前
别再纠结 Conda 了!2026 年,uv 才是 Python 环境管理的唯一真神
后端·python
Thomas.Sir1 小时前
第一章:Python3 基础入门:从零基础到实战精通
python·ai
telllong1 小时前
BeeWare:Python原生移动应用开发
开发语言·python
tang777891 小时前
小红书平台用什么代理 IP 比较好?2026年3月实测数据 + 选型推荐
网络·爬虫·python·网络协议·tcp/ip·数据挖掘·ip
dulu~dulu3 小时前
算法---寻找和为K的子数组
笔记·python·算法·leetcode
编程之升级打怪4 小时前
用Python语言实现简单的Redis缓冲数据库驱动库
redis·python
电商API&Tina4 小时前
电商数据采集API接口||合规优先、稳定高效、数据精准
java·javascript·数据库·python·json