Python按行对比2张表格--Apple的学习笔记

一,动机:

因为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)

四,运行结果如下:

  1. 没有实现或者错误实现的项如下:
    表格行数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']
  2. 锦上添花的项如下:

你可能感兴趣的:(Python按行对比2张表格--Apple的学习笔记)