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

如何使用Python删除CSV文件中不在指定ID列表内的多余行

问题分析与修正方案

原代码存在以下缺陷:

  • 类型不匹配:l_id 存储的是整数类型,从CSV行拆分得到的ID为字符串类型,直接做集合判断永远无法正确匹配
  • 匹配逻辑不严谨:直接对整行拆分后做集合判断,若Name列出现和目标ID相同的数值会出现误判,没有精准匹配ID列
  • 读写逻辑不规范:使用csv.writer写文件,但读文件没有使用配套的csv.reader解析,直接传入字符串写行会导致CSV格式错乱
  • 表头丢失风险:没有单独处理首行表头,会被当做普通行判断过滤
修正后的实现方案

方案1:使用标准csv模块实现(无需额外安装依赖)

import csv

l_id = [18850080, 535553, 19292162, 1728035, 1179719, 19194894, 22817838, 19997487, 19728145, 1457232, 13560402, 18855476, 7151442, 18955830, 11294262, 18506072, 1360698]
# 转换为字符串集合,加快匹配速度同时适配CSV读取的字符串类型ID
valid_id_set = set(map(str, l_id))

with open('abc.csv', 'r', newline='', encoding='utf-8') as inp, open('abc_edit.csv', 'w', newline='', encoding='utf-8') as out:
    reader = csv.DictReader(inp)
    writer = csv.DictWriter(out, fieldnames=reader.fieldnames)
    # 写入表头
    writer.writeheader()
    # 逐行判断ID是否在有效列表中
    for row in reader:
        if row['ID'] in valid_id_set:
            writer.writerow(row)

该方案精准匹配ID列,不会出现误匹配问题,同时保留原CSV表头和格式。

方案2:使用pandas实现(代码更简洁,适合大文件处理)

import pandas as pd

l_id = [18850080, 535553, 19292162, 1728035, 1179719, 19194894, 22817838, 19997487, 19728145, 1457232, 13560402, 18855476, 7151442, 18955830, 11294262, 18506072, 1360698]

df = pd.read_csv('abc.csv')
# 筛选ID在l_id中的行
df_filtered = df[df['ID'].isin(l_id)]
# 保存结果,不写入自带的索引列
df_filtered.to_csv('abc_edit.csv', index=False)

该方案仅需3行核心代码即可完成需求,处理效率更高。

内容的提问来源于stack exchange,提问作者abc xyz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:06:03