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)
相关推荐
@forever@13 小时前
【JAVA】LinkedList与链表
java·python·链表
程序员爱钓鱼13 小时前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)
后端·python·ipython
程序员爱钓鱼13 小时前
Python实战:用高德地图API批量获取地址所属街道并写回Excel
后端·python·ipython
reasonsummer15 小时前
【教学类-97-06】20251105“葡萄”橡皮泥黏贴(小班主题《苹果与橘子》)
python
卖个几把萌15 小时前
【16】Selenium+Python 接管已打开谷歌浏览器
python·selenium·测试工具
像风一样的男人@15 小时前
python --两个文件夹文件名比对(yolo 图和label标注比对检查)
windows·python·yolo
lllsure16 小时前
【Python】Dict(字典)
开发语言·python
tianyuanwo16 小时前
Rust开发完全指南:从入门到与Python高效融合
开发语言·python·rust
如何原谅奋力过但无声17 小时前
TensorFlow 2.x常用函数总结(持续更新)
人工智能·python·tensorflow
程序员-小李17 小时前
基于 Python + OpenCV 的人脸识别系统开发实战
开发语言·python·opencv