对照两个Excel表格,判断第一个表格的数据是否存在第二个表格中

室友今晚拖着疲惫的身躯回到出租屋。他脸色苍白,面容憔悴,一问之下他说今天公司很多事情做。还有一件事让他很苦恼,那就是boss给了他两张表格,数据类型是一样的,让他找到在第一张表格里存在而第二张表格里不存在的数据。

路见不平,拔刀相助,要不就写几行简单的python脚本来帮一下可怜的孩子吧……


首先,先安装读取xlsx文件的模块xlrd

pip install xlrd

接着就是python代码,一切尽在注释中

import xlrd

file1 = "/home/lu/Desktop/Book1 (copy).xlsx"  # 待检测文件路径
file2 = "/home/lu/Desktop/Book1.xlsx"  # 对照文件路径


# 传入待检测表格路径和对照表格路径
def compare(file1, file2):
    num = []  # 存放所有不存在的数据在待检测表格中的索引
    wb1 = xlrd.open_workbook(file1)    #打开待检测xlsx文件
    wb2 = xlrd.open_workbook(file2)    #打开对照xlsx文件
    sheet1 = wb1.sheet_by_index(0)    #参数0是索引,表示wb1这个文件的第一张表格
    sheet2 = wb2.sheet_by_index(0)    #和上同理
    #sheet1.nrows表示sheet1一共有多少行数据,遍历每一行来查找在sheet2中是否存在
    for i in range(sheet1.nrows):  
        #嵌套循环对比,将sheet1中的数据与sheet2中的每一条数据进行对比  
        for o in range(sheet2.nrows):
            #对比每一行数据是否相等(这里注意两个表格对应每列的顺序要一样)
            #如果没有遍历到末尾就发现指定的sheet1中数据存在,则直接break进行下一条sheet1数据对比
            if sheet1.row_values(i) == sheet2.row_values(o):
                break
            #如果遍历到sheet2的末尾还是不相等的话,那么该数据在sheet2中不存在
            #将不存在的数据的索引加入列表num中
            elif o == sheet2.nrows-1 and sheet1.row_values(i) != sheet2.row_values(o):
                num.append(i)
    #返回存有不存在于sheet2中的数据在sheet1中的索引列表
    return num

#输出该列表
print(compare(file1, file2))

垂死病中惊坐起,室友说他的两个表格的第一列是唯一的的值,那么只比较第一列的数据然后返回不存在于第二张表中的值好了。(刚开始我还以为这样子的时间复杂度会减少一点,百度了一下in在列表里的时间复杂度也是O(n),和上面那个compare函数总的时间复杂度差不多;不过看样子下面的写法更简洁易懂一丢丢)

太难受了,虽然改动很少,但有想法不改一下憋得慌,大半夜突然起来改代码还把室友吵醒了……被怼了

def compare2(file1, file2):
    nickName = []  # 存放所有不存在的数据在待检测表格中的索引
    wb1 = xlrd.open_workbook(file1)  # 打开待检测xlsx文件
    wb2 = xlrd.open_workbook(file2)  # 打开对照xlsx文件
    sheet1 = wb1.sheet_by_index(0)  # 参数0是索引,表示wb1这个文件的第一张表格
    sheet2 = wb2.sheet_by_index(0)  # 和上同理
    #遍历sheet1中第一列每一项
    for i in sheet1.col_values(0):
        #查看是否在sheet2第一列中
        if i in sheet2.col_values(0):
            continue
        else:
            nickName.append(i)
    return nickName  #返回的是不存在于sheet2中的数据的第一列的值的列表

顺带记录一下,与本文主题无关:

要修改pipenv的镜像源的时候可以直接修改pipfile里【sources】中的url属性,改成对应的源就好了,然后我刚开始改完之后问题不断,后来发现原来要重启一下pycharm才会生效。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值