几天前,单位同事遇到一个难题,需要将两个电子表格中的数万条数据进行对比,找到其中的重复数据,电子表格也有这个功能,但是因为数据量太大,起动对比之后计算机就卡死了。
我听了他的介绍之后,告诉他,我可以用Python试一试。
于是让他把数据传给我,开始研究起来,花了1个小时终于把代码调好了,总计23行代码,结果立马呈现出来了,小有成就。
但是还是不够完美,为了让程序能够适应所有要对比的数据,并生成一个新的电子表格,陆续又做了一些改进,总计32行代码,把代码晒出来,分享一下:
from openpyxl import load_workbook, Workbook #导入模块
wb1 = load_workbook('D:\peple\excel01.xlsx') #打开工作簿,并创建一个工作簿对象wb1
wb2 = load_workbook('D:\peple\excel02.xlsx')
a_wb = wb1['导出'] #创建一个工作表对象
b_wb = wb2['导出']
a_wb_max_row = len(a_wb['A'])
b_wb_max_row = len(b_wb['A'])
c=[] #建立一个空列表,用于存放对比出来的相同数据
for row in a_wb.iter_cols(min_row=1, max_row=a_wb_max_row, min_col=1, max_col=1, values_only=True): #历遍工作表对象制定区域的数值
row1 = list(row) #将元祖转换我列表
for row in b_wb.iter_cols(min_row=1, max_row=b_wb_max_row, min_col=1, max_col=1, values_only=True):
row2 = list(row)
for i in row1:
if i in row2: #如果包含则返回循环
break
else: #如果不包含,则把值保存到c列表中
c.append(i)
wb3 = Workbook() #创建新工作簿对象
c_wb = wb3.active #创建活动工作表对象
for i in range(len(c)): #将列表分行写入工作表对象
d=[c[i]]
c_wb.append(d)
wb3.save('D:\peple\mynewdata.xlsx') #保存数据到新工作簿