我有2个工作表。我需要将工作表“数据”(35万行,字符串)中的每个单元格与另一个工作表“字典”中的单元格进行比较。如果字符串不在“字典”中或不在“字典”的第一列中,则不执行任何操作。如果它在“词典”中的其他位置,请在相应的第一栏中获取该值。然后转到“数据”并将其写在“数据”中最初存在的位置旁边。
如标题中所述,问题在于速度。此代码适用于约150行的测试文件,但需要4分钟才能完成。因此,将其用于我的文件是不可行的。请告诉我如何加快速度。这是我的第一个python代码。
import openpyxl
wb = openpyxl.load_workbook('Test.xlsx')
first_sheet = wb.sheetnames[0]
Data = wb.get_sheet_by_name(first_sheet)
second_sheet = wb.sheetnames[1]
Dictionary = wb.get_sheet_by_name(second_sheet)
for rownum in range(2,Data.max_row+1):
var1 = Data.cell(row=rownum, column=1).value
for rownum1 in range(2,Dictionary.max_row+1):
var2 = Dictionary.cell(row=rownum1, column=1).value
for colnum2 in range(2,Dictionary.max_column+1):
var3 = Dictionary.cell(row=rownum1, column=colnum2).value
if var1 != var2 and var1 == var3:
Data.cell(row=rownum, column=4).value = var2
wb.save('Test.xlsx')
else:
None
您可以使用散列集解决问题,该散列集将使您检查是否存在恒定时间的值。
编辑:您想要一个更具体的示例
导入并设置文件:
import openpyxl
wb = openpyxl.load_workbook('Test.xlsx')
first_sheet = wb.sheetnames[0]
Data = wb.get_sheet_by_name(first_sheet)
second_sheet = wb.sheetnames[1]
Dictionary = wb.get_sheet_by_name(second_sheet)
将Dictionary中的每个值读取到内存中,创建一个Dictionary数据结构,将Dictionary中不在第一列中的每个值与该特定行中第一列的值相匹配。
Dict = {}
for row in range(2, Dictionary.max_row + 1):
for col in range(2, Dictionary.max_column + 1):
cell_value = Dictionary.cell(row=row, col=col).value
Dict[cell_value] = Dictionary.cell(row=row, col=1).value
现在遍历数据并使用Dict执行操作:
for row in range(2, Data.max_row+1):
for col in range(2, Data.max_column + 1):
cell_value = Data.cell(row=row, col=col).value
if cell_value in Dict: #if it was elsewhere in Dictionary
#I'm not sure what you meant by next to so here it just overwrites
#The value with the corresponding 1st row in Dictionary
Data.cell(row=row, col=col).value = Dict[cell_value]
wb.save('Test.xlsx') #save once at the end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句