初始需求
比对从企微接口获取的数据和企微管理台展示数据
双方数据格式
从企微接口获取的数据:json文件 企微管理台展示数据:xlsx文件
原数据获取
从企微接口获取的数据:直接从本地数据库获取
企微管理台展示数据:通过python + selenium 获取
遇到的问题
- 从本地库中获取的数据是有唯一标识符的,但是从页面获取的数据没有
- 从本地库中获取的数据是宝安icon的,而从页面获取的数据中,只能获取到文本,图片这类的是用<img> 标签包裹的,未获取到
- 由于以上两个问题,导致了没法通过唯一标识符或者是纯文本来进行比对。
处理方案
- 本次采用的是python语言
- 读取双方数据,双重循环进行比对,由于文本上的差异,只能进行相似性比对,而不能用完全相等。
- 将比对结果大于0.7的值更新到xlsx文件的新列
- 人工检查文件中的结果,查看哪些数据是有异常的,进行复核。
代码
``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)