使用openpyxl从大文件中删除行

2024-04-16 23:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用openpyxl处理一个.xlsx文件,该文件包含大约10K个产品,其中一些是“常规项目”,一些是需要订购的产品。对于我正在做的项目,我希望删除包含需要订购的项目的所有行

我用实际工作簿的一小部分样本进行了测试,代码按照我想要的方式运行。然而,当我在实际的工作簿中尝试这项操作时,删除这些行似乎要花费很长时间(它已经运行了将近一个小时)

以下是我使用的代码:

wb = openpyxl.load_workbook('prod.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
def clean_workbook():
    for row in sheet:
        for cell in row:
            if cell.value == 'ordered':
                sheet.delete_rows(cell.row)

我想知道在我的代码中有没有一个更快的方法来做一些调整?或者,有没有更好的方法只读取工作簿中的常规库存,而不删除不需要的项目


Tags: 文件项目方法代码infor产品cell
2条回答

删除循环中的行可能很慢,因为openpyxl必须更新被删除行下面的所有单元格。因此,您应该尽可能少地这样做。一种方法是收集行号列表,检查连续组,然后使用此列表从底部删除

更好的方法可能是通过ws.values循环并写入一个新的工作表,过滤掉相关的行。复制任何其他相关数据,如格式等。然后可以删除原始工作表并重命名新工作表

ws1 = wb['My Sheet']
ws2 = wb.create_sheet('My Sheet New')

for row in ws1.values:
    if row[x] == "ordered": # we can assume this is always the same column
       continue
    ws2.append(row)

del wb["My Sheet"]
ws2.title = "My Sheet"

对于更复杂的过滤,您可能希望将值加载到数据帧中,进行更改,然后写入新的工作表

您可以以只读模式打开,并将所有内容导入列表,然后在列表中修改总是比在excel中工作快得多。修改列表后,制作新的工作表并将列表上载回excel。我用我的10万个项目excel这样做

相关问题 更多 >