提高excel文件操作的速度(使用openpyxl):如果有条件检查值和删除行操作

用户3541631

我有一个中等大小的 excel 文件,大约有 25000 行。

在 excel 文件中,我检查特定列值是否在列表中,如果在列表中,我将删除该行。

我正在使用 openpyxl。

编码:

   count = 1
    while count <= ws.max_row:
        if ws.cell(row=count, column=2).value in remove_list:
            ws.delete_rows(count, 1)
        else:
            count += 1
    wb.save(src)

该代码有效,但完成速度非常慢(需要数小时)。

我知道这是只读和只写模式,但在我的情况下,我同时使用,首先检查和第二次删除。

爸爸

我看到您正在使用需要删除的行列表。相反,您可以创建要删除的行的“序列”,从而将像 [2,3,4,5,6,7,8,45,46,47,48] 这样的删除列表更改为 [[2, 7] ],[45, 4]]

即从第 2 行开始删除 7 行,然后从第 45 行开始删除 4 行

批量删除比 1 x 1 快。我在大约 10 秒内删除了 6k 行

以下代码将列表转换为列表/序列列表:

def get_sequences(list_of_ints):
    sequence_count = 1
    sequences = []
    for row in list_of_ints:
        next_item = None
        if list_of_ints.index(row) < (len(list_of_ints) - 1):
            next_item = list_of_ints[list_of_ints.index(row) + 1]

        if (row + 1) == next_item:
            sequence_count += 1
        else:
            first_in_sequence = list_of_ints[list_of_ints.index(row) - sequence_count + 1]
            sequences.append([first_in_sequence, sequence_count])
            sequence_count = 1

    return sequences

然后运行另一个循环删除

    for sequence in sequences:
        sheet.delete_rows(sequence[0], sequence[1])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章