美文网首页计算机图像理论opencv及vslamPython时空大数据
Python按行对比2张表格--Apple的学习笔记

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

作者: applecai | 来源:发表于2019-10-01 10:00 被阅读0次

    一,动机:

      因为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的学习笔记

        本文链接:https://www.haomeiwen.com/subject/cfdkpctx.html