如何在Openpyxl中快速搜索和编辑Excel文件

摇摆

我有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中快速在大文件中搜索字符串?

如何在Android Shell中复制和编辑文件?

如何在Eclipse(Luna)中快速复制当前的编辑文件名或完整文件路径?

如何在搜索栏中更改边框和图标(快速)

如何在Shiny中编辑.yml文件

如何在打开的编辑器中搜索具有给定扩展名的文件?

如何在VSCode快速搜索中包含git忽略的文件

如何在Excel中编辑值

如何在Python中读取,编辑和另存为另一个excel文件?

如何在Ubuntu 13.10中编辑Nautilus快速列表?

如何在多个Word文件中搜索和替换?

如何在Outlook中快速更改编辑语言

如何在Nano中快速保存文件

如何在文件和显示行中搜索文本

如何在vimperator中快速搜索剪贴板的内容?

如何在Excel 2010中(在“文件”功能区和快速访问栏中)禁用“保存并发送”?

OpenPyXL +如何在Excel的单元格中搜索内容,并且如果内容符合搜索条件,则会更新内容?

如何仅搜索和编辑Excel工作表中的“日期类型”单元格

如何在Vim中编辑多个文件?

如何在整个工作区中快速搜索文件(Visual Studio Code)

如何在Excel中的单个单元格中快速编辑重复数据?

如何在Perl中编辑文件文本

如何在python中搜索选择和编辑文本文件的特定部分

如何在快速搜索中删除区分大小写?`

如何在 OpenPyXL 中扩展 Excel 表格的范围?

我如何在使用 python 中的 xlwings 或 openpyxl 包执行读写文件时隐藏 excel

如何快速从大文件中搜索列表内容?

如何在python中读取从excel编辑的csv文件?

intellij:如何在编辑器中的项目树中快速导航到文件?