思路很简单,首先是将两个电子表格中需要对比的数据读取出来,默认读取出来的数据是元组,求交集最好的方式是把数据转换为集合,然后直接用交集运算符‘&’进行交集运算。再将运算好的数据转换为列表写入电子表格中,最后保存。
文件目录:
D:\python\doc下面有多个文件夹,每个文件夹下面有一个文件;
现在需要每个文件与D:\python\data.xlsx逐个交集。
每个交集生成一个电子表格保存到一个目录里面
代码如下:
from openpyxl import load_workbook, Workbook #导入电子表格处理模块
import os #导入系统模块
path = "D:\python\doc" #读取文件列表
file_names = os.listdir(path)
for file_name in file_names:
print(file_name)
wb1 = load_workbook(f'D:\python\doc\{file_name}\{file_name}.xlsx') #打开工作簿,并创建一个工作簿对象wb1
wb2 = load_workbook('D:\python\data.xlsx')
a_wb = wb1['sheet_name'] #打开工作表,并创建一个工作表对象
b_wb = wb2['sheet_name']
a_wb_max_row = len(a_wb['A']) #取出第一列数据
b_wb_max_row = len(b_wb['A'])
for col in a_wb.iter_cols(min_row=2, max_row=a_wb_max_row, min_col=1, max_col=1, values_only=True): #历遍工作表对象制定区域的数值
col1 = set(col) #将元祖转换为集合
for col in b_wb.iter_cols(min_row=1, max_row=b_wb_max_row, min_col=1, max_col=1, values_only=True):
col2 = set(col)
col = col1&col2 #交集运算
l_col3 = list(col) #将集合转换为列表
wb3 = Workbook() #创建新工作簿对象
c_wb = wb3.active #创建活动工作表对象
for i in range(len(l_col3)): #将列表分行写入工作表对象
d=[l_col3[i]]
c_wb.append(d)
wb3.save(f'D:\python\已生成文件A\{file_name}.xlsx') #保存数据到新工作簿
python代码可以不断优化,有时候自己可以编写一个函数,或者官方提供了函数,通过重复调用和调用官方函数减少代码数量。