python删除excel符合条件的行_OpenPyXL如何根据某些条件从Excel文件中删除行?

在for循环中删除直接元素总是会遇到问题。对于包含12行的工作表及其相应的行值,请考虑以下代码:for i in range(1, sh.max_row + 1):

print(sh.cell(row=i, column=1).value)

# 1 .. 12

现在看看开始删除内容时会发生什么:

^{pr2}$

您可以看到在i in [5, 6, 7]期间,行的移位从第6行开始,因为第5行已经被删除,使原始行6成为新行5,原始行7新行6。。。所以在i = 6的下一次迭代中,单元格实际上是从原始数据中引用第7行的值。您实际上跳过了对第6行的迭代。在

最简单的答案是使用while循环,而不是for:i = 1

while i <= sh.max_row:

print(f'i = {i}\tcell value (i, 1) is {sh.cell(row=i, column=1).value}')

if sh.cell(row=i, column=1).value in [5,6,7]:

sh.delete_rows(i, 1)

# Note the absence of incremental. Because we deleted a row, we want to stay on the same row because new data will show in the next iteration.

else:

i += 1

# Because the check failed, we can safely increment to the next row.

# i = 1 cell value (i, 1) is 1

# i = 2 cell value (i, 1) is 2

# i = 3 cell value (i, 1) is 3

# i = 4 cell value (i, 1) is 4

# i = 5 cell value (i, 1) is 5 # deleted

# i = 5 cell value (i, 1) is 6 # deleted

# i = 5 cell value (i, 1) is 7 # deleted

# i = 5 cell value (i, 1) is 8

# i = 6 cell value (i, 1) is 9

# i = 7 cell value (i, 1) is 10

# i = 8 cell value (i, 1) is 11

# i = 9 cell value (i, 1) is 12

# verify the data has been deleted

for i in range(1, sh.max_row +1):

print(sh.cell(row=i, column=1).value)

# 1

# 2

# 3

# 4

# 8

# 9

# 10

# 11

# 12

您现在可以看到,虽然i没有达到12,但是由于i=5已经处理了三次,所以每一行都被迭代。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值