python:多个Excel之间进行查重删除

python:多个Excel之间进行查重删除

前言

写这个程序的原因是最近在工作中需要从某个网站上导出问卷填写的名单到Excel里,需要分别导出填写完问卷的和未填写完问卷的,因此有两份Excel。
其中有些人第一次问卷没填写完就提交了,然后又重新填写并且填完了这个问卷并提交了。这就造成了两个后果,其一是那个人的名字即出现在未填写完问卷的名单里,又出现在已填写完问卷的名单里;第二个后果就是要我
从里面一个个找出来这些人。所以我就写了这个程序帮我把这些人找出来顺便整理好。

下面就讲以下这个程序的基本原理。

正文

import openpyxl

该程序需要用到一个库:openpyxl库。

openpyxl库是用来读写excel的,这个库的读写速度很快,但是有一个缺点是只能用于xlsx,不能用于xls,所以一定要是xlsx文件。

path1 = r'.\试验\excel1.xlsx'
path2 = r'.\试验\excel2.xlsx'
list_excel1 = []

第一步就是就是给出这两个指定的xlsx文件的路径。

上面的那行代码就是打开指定的xlsx文件,文件路径写在括号里,这里因为在路径前面有个’r’来读取,所以可以直接用’\',否则要把’\'都换成’/'。

第三行是给后面做准备,详细看后面的内容。

excel1 = openpyxl.load_workbook(path1)
table1 = excel1.active
row_one = table1.max_row
for i in range(row_one):
    cell_value = table1.cell(i+2,1).value
    list_excel1.append(cell_value)

第二步我们先处理Excel1也就是已填写完问卷的名单。

**第一二行打开Excel1的表格,第三行是用’max_row’获取该表格一共有多少行。第四行要注意一点:python是从0开始计数,而不是从1开始计数;然后我这里第四行是从’i+2’开始是因为第一行是’姓名、电话’,第二行开始才是我想要的东西(详细看后文的配图),所以是’i+2’。**然后把一个个姓名装进列表里,为后面的查重做准备。

excel2 = openpyxl.load_workbook(path2)
table2 = excel2.active
row_two = table2.max_row
for i in range(row_two):
    cell_value = table2.cell(i+2,1).value
    if cell_value in list_excel1:
        table2.delete_rows(i+2)
    else:
        continue

然后处理Excel2也就是未填写完问卷的名单。我们要把名单里实际上已填写完问卷的找出来并去掉。前面五行与处理Excel1的原理是一样的;第四到第九行则是把Excel2里的名字一个个与Excel1进行匹配查重,若名字两个表格里都出现了,就会把Excel2里有重复的那整行都删除。

excel1.save(path1)
excel2.save(path2)

最后一步就是保存文件。

最后看看效果,图下分别是处理前的Excel1和Excel2(从上到下)。

运行完后,Excel2的效果:

甚至这个程序还帮你把剩下的行自动上移填补被删去后留下的空行(我真的哭死,本来我还在想留了空行又要怎么处理,结果是我想多了)。

最后附赠一下完整代码:

import openpyxl
path1 = r'.\试验\excel1.xlsx'
path2 = r'.\试验\excel2.xlsx'
list_excel1 = []
excel1 = openpyxl.load_workbook(path1)
table1 = excel1.active
row_one = table1.max_row#get how many rows the excel1 has
for i in range(row_one):
    cell_value = table1.cell(i+2,1).value#don't contain the name and number of the first line
    list_excel1.append(cell_value)#prepare for the next check
excel2 = openpyxl.load_workbook(path2)#open excel2
table2 = excel2.active
row_two = table2.max_row#get how many rows the excel2 has
for i in range(row_two):#check table2 iteratively
    cell_value = table2.cell(i+2,1).value
    if cell_value in list_excel1:#if there is a duplicate wit table1,delete this row
        table2.delete_rows(i+2)
    else:
        continue
excel1.save(path1)
excel2.save(path2)

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值