一,动机:
因为RTE接口设计文档是表格,然后工具操作人员按照设计表格会生成arxml文件,我已经能从arxml文件中提取RTE接口设计信息并且保存成表格。
那么我就可以检查操作人员最后输出的结果是否和设计一致。
二,立项:
我要做的就是按行对比两张表格。
先用xlrd读取表格数据到list中,然后对比list。结果发现一个严重的问题就是表格某列是数字,需要转为字符对比。用xlrd按行对比的时候还要转列数据为字符很不方便。
于是修改方案为pandas读取表格然后转为list进行按行对比。
三,代码如下:
# -*- coding: utf-8 -*-
import xlrd
import os
import pandas as pd
import numpy as np
def read_excel_list(fname):
filepath = os.path.join(os.path.dirname(__file__), "input", fname)
# 将数字类型都转为字符串,否则会影响对比结果
tempdf=pd.read_excel(filepath, sheet_name='SWC', dtype={'InitValue':str})
# tempdf = tempdf.replace(np.nan, '', regex=True)
tempdf=tempdf.fillna('') # 对于空格需要将nan替换,否则会影响对比结果
# 将df转为list前需要先转为np.array
tempnp=np.array(tempdf)
return(tempnp.tolist())
def compareDesigner(lista,listb):
result=False
for i,item in enumerate(lista):
if item not in listb:
result = True
# i+1个标题+1个从0还是改成从1开始,所以为加2
print(' 表格行数{}:内容{}'.format(i+2, item))
else:
result = False
if result==False:
print(" 无")
if __name__ == '__main__':
# 结果文件,将对标设计文件,不匹配则输出
listReal=read_excel_list("SWC1.xls")
# 设计文件
listDesign=read_excel_list("SWC2.xls")
# 开始对比2个表格
print("1. 没有实现或者错误实现的项如下:")
compareDesigner(listDesign,listReal)
print("2. 锦上添花的项如下:")
compareDesigner(listReal,listDesign)
四,运行结果如下:
- 没有实现或者错误实现的项如下:
表格行数11:内容['ppForward_Looking_Target_1_0x681', 'send', 'if_376_0x681', 's_FLT1_Long_Velocity', '0', '', '', '', 'uint16']
表格行数12:内容['ppForward_Looking_Target_1_0x681', 'send', 'if_376_0x681', 's_FLT1_Long_Range', '0', '', '', '', 'uint16']
表格行数13:内容['ppForward_Looking_Target_1_0x681', 'send', 'if_376_0x681', 's_FLT1_Rolling_Counter', '0', '', '', '', 'uint8']
表格行数14:内容['ppForward_Looking_Target_1_0x681', 'send', 'if_376_0x681', 's_FLT1_Range_Rate', '0', '', '', '', 'uint8']
表格行数15:内容['ppForward_Looking_Target_1_0x681', 'send', 'if_376_0x681', 's_FLT1_Lat_Velocity', '0', '', '', '', 'uint8']
- 锦上添花的项如下:
无
网友评论