You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python删除Excel工作表中匹配搜索内容的整行数据

现有代码问题

你写的代码存在以下问题,无法实现删除匹配行的需求:

  • 变量拼写错误:筛选结果存为df1,循环时误写为dfl(数字1和小写字母l混淆)
  • 未定义remove()方法,openpyxl库没有内置这个直接删除行的函数
  • pandas筛选返回的是DataFrame结构,直接遍历无法获取Excel内对应的真实行号
  • 文件名大小写不统一:pandas读入时用的database.xlsx,openpyxl加载用的DataBase.xlsx,跨系统运行会直接报文件不存在错误
  • 循环内反复保存文件效率极低,且删除行时如果从前向后删会导致行号偏移,出现删错行、漏删的问题

示例截图

修正后可直接运行的代码

这里直接用openpyxl单库操作,避免两个库同时读写产生的冲突问题:

import openpyxl

# 文件名请和本地实际文件名大小写完全保持一致
wb = openpyxl.load_workbook('DataBase.xlsx')
sheet = wb['Movies']

def remove_movie():
    target = input('请输入要删除的电影名称关键词:').strip()
    match_rows = []
    # 假设电影名称在A列(第1列),表头在第1行,数据从第2行开始遍历
    for row_idx, row_content in enumerate(sheet.iter_rows(min_row=2, values_only=True), start=2):
        title = row_content[0]
        # 空值跳过,做大小写不敏感的模糊匹配
        if title and target.lower() in str(title).lower():
            match_rows.append(row_idx)
    
    if not match_rows:
        print("未查询到匹配的电影条目")
        return
    
    # 先打印匹配到的内容确认
    print("查询到以下匹配条目,将删除对应整行:")
    for r_num in match_rows:
        print(f"行号{r_num}:{sheet.cell(row=r_num, column=1).value}")
    
    # 必须从行号大的往行号小的顺序删除,避免行号偏移导致删错
    for r_num in sorted(match_rows, reverse=True):
        sheet.delete_rows(r_num)
    
    # 所有删除操作完成后统一保存文件
    wb.save('DataBase.xlsx')
    print(f"操作完成,共删除{len(match_rows)}条数据")

remove_movie()
使用注意事项
  • 如果电影名称列不是A列,把代码里的row_content[0]、column=1替换为对应列即可:比如B列对应row_content[1]、column=2,列索引从0开始计数,单元格列号从1开始计数
  • 如果需要精确匹配电影名称,把匹配判断逻辑替换为if title and str(title).strip() == target即可
  • 运行代码前请关闭正在打开的目标Excel文件,否则会触发权限错误无法保存修改

内容的提问来源于stack exchange,提问作者M Zameer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:30:43