前情形容

两份Excel的构造不尽相同,然而有局部字段值能够作为主键,这些列在指标文件中都能找到
次要思路:
    1. 将两个文件的主键作为键,将要核查的列作为值,保留到字典中而后再进行比拟
    1. 将两个文件将要比拟的字段做成一个列表进行比拟。

办法1 代码演示

import xlrdimport xlwtimport timelist2 = 'D:\\MyDocuments\\lit\\Desktop\\ares-host-list\\host3.xls'list1 = 'D:\\MyDocuments\\lit\\Desktop\\ares-host-list\\yly3.xls'origin_dict = {}  # 初始化,用于保留源文件{key(主键):value(须要核查的列值)}target_dict = {}  # 初始化,用于保留指标文件{key(主键):value(须要核查的列值)}def compare_excel(ori_path,tar_path,col_ori,col_tar,keys_ori,keys_tar):    '''    ori_path:用于寄存源文件    tar_path:用于寄存指标文件    col_ori:源文件中须要比拟的列    col_tar:指标文件中须要比拟的列    keys_ori:源文件中须要比拟的列的key    keys_tar:指标文件中须要比拟的列key    例子:源文件如下:{'p0-app01': '10.130.51.176',}   指标文件如下:{'p0-web03': '10.130.101.26'}       else:      col_ori = keys_ori ,col_tar = keys_tar   源文件如下:{'10.130.101.152': '10.130.101.152'}   指标文件如下:{'10.81.26.164': '10.81.26.164'}   同样能够比拟(却决于你的两张婊子数据)    '''    success = 0  # 核查无差别的个数    fail = 0     # 核查后果有差别的个数    row_res = 0  #要写入的文件的行    # 别离关上源文件与指标文件    wb_ori = xlrd.open_workbook(ori_path)    wb_tar = xlrd.open_workbook(tar_path)    # 新建一个excel,用于寄存核查后果    wb_res = xlwt.Workbook()    # 别离获取源文件与指标文件的sheet    sheet_ori = wb_ori.sheet_by_index(0)    sheet_tar = wb_tar.sheet_by_index(0)    # 新建一名称为result的sheet页,用于寄存核查具体后果    sheet_res = wb_res.add_sheet('D:\\MyDocuments\\lit\\Desktop\\ares-host-list\\result.xlsx')    # 获取源文件中由主键、需核查列组成的键值对,放入字典中    for row_ori in range(1,sheet_ori.nrows):        cell_ori_key = sheet_ori.cell_value(row_ori,keys_ori)  #因我的源文件的主键位于第0列,故该列未参数化,大家能够视本人理论状况进行优化        #cell_ori_key1 = sheet_ori.cell_value(row_ori, 5)        cell_ori_value = sheet_ori.cell_value(row_ori,col_ori)        origin_dict[cell_ori_key] = cell_ori_value        #origin_dict[cell_ori_key + cell_ori_key1] = cell_ori_value    print('源文件如下:%s' % origin_dict)    # 获取指标文件中由主键、待核查列组成的键值对,放入字典中    for row_tar in range(1,sheet_tar.nrows):        cell_tar_key = sheet_tar.cell_value(row_tar,keys_tar)        cell_tar_value = sheet_tar.cell_value(row_tar,col_tar)        target_dict[cell_tar_key] = cell_tar_value    print('指标文件如下:%s' % target_dict)    try:        for i in origin_dict.keys():  # 获取源文件字典的键            if target_dict.get(i) == origin_dict.get(i):  # 比照两个字典中雷同键的值                success += 1  # 值相等,则无差别数+1                sheet_res.write(row_res+1,0,i)  # 将键写入后果文件的第0列                sheet_res.write(row_res+1,1,'你俩长一样')  #将核查无差别后果写入后果文件的第1列                row_res += 1  # 后果文件行数+1                print('IP %s 核查无差别'% i)            else:                fail +=1  # 值不相等,则有差别数+1                sheet_res.write(row_res+1,0,i)                sheet_res.write(row_res+1,1,'核查有差别:源文件的值为:%s,指标文件的值为:%s' % (origin_dict.get(i),target_dict.get(i)))  # #将核查有差别后果写入后果文件的第1列                row_res += 1  # 后果文件行数+1                print('Host IP %s 核查有差别:源文件的值为:%s,指标文件的值为:%s' % (i,origin_dict.get(i),target_dict.get(i)))                wb_res.save('D:\\MyDocuments\\lit\\Desktop\\ares-host-list\\result.xlsx')  # 保留后果文件        print(time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())+'核查实现,共核查 %d 条,其中无差别 %d 条, 有差别 %d条' % (len(origin_dict),success,fail))    except Exception as error:        print(str(error))compare_excel(list1,list2,4,6,4,6)  # 核查源文件第5列,指标文件第7列

  • 源文件

  • 指标文件