比对处理流程记录

140 阅读2分钟

初始需求

比对从企微接口获取的数据和企微管理台展示数据

双方数据格式

从企微接口获取的数据:json文件 企微管理台展示数据:xlsx文件

原数据获取

从企微接口获取的数据:直接从本地数据库获取
企微管理台展示数据:通过python + selenium 获取

遇到的问题

  1. 从本地库中获取的数据是有唯一标识符的,但是从页面获取的数据没有
  2. 从本地库中获取的数据是宝安icon的,而从页面获取的数据中,只能获取到文本,图片这类的是用<img> 标签包裹的,未获取到
  3. 由于以上两个问题,导致了没法通过唯一标识符或者是纯文本来进行比对。

处理方案

  1. 本次采用的是python语言
  2. 读取双方数据,双重循环进行比对,由于文本上的差异,只能进行相似性比对,而不能用完全相等。
  3. 将比对结果大于0.7的值更新到xlsx文件的新列
  4. 人工检查文件中的结果,查看哪些数据是有异常的,进行复核。

代码

``python

import json
from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill
import difflib

input_file_name = 'openpyxl.xlsx'
json_file = 'data.json'
wb = Workbook()
addr = "data-json.xlsx"


def string_similar(s1, s2):
    return difflib.SequenceMatcher(None, s1, s2).quick_ratio()


def read_json(json_file_name):
    with open(json_file_name, 'r', encoding='utf-8') as file:
        global data
        data = json.load(file)
        # print(data)


def read_excel(input_file_name):
    """
    从xlsx文件中读取数据
    """
    workbook = load_workbook(input_file_name)
    table = workbook.active
    rows = table.max_row

    global row_index_s
    for row in range(rows):
        cell_data = str(table.cell(row + 1, 1).value)
        for content in contents:
            if string_similar(cell_data.strip().replace('\n', '\n'), content) > 0.7:
                result = table.cell(row + 1, 6, None)
                result.fill = PatternFill(patternType="solid", start_color="3399ff")
                break
        print(row + 1)

    for index in row_index_s:
        result = table.cell(index, 6, None)
        result.fill = PatternFill(patternType="solid", start_color="000000")
    workbook.save(input_file_name)
    workbook.close()


row_index_s = []
data = []
read_json(json_file)
contents = []
for d in data:
    contents.append(d['content'])
read_excel(input_file_name)