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

Python 3.3中如何删除DictReader对象中的行?

解决csv.DictReader无法删除行的问题

嗨,我来帮你搞定这个问题!你碰到的报错完全在意料之中——csv.DictReader本质是迭代器,它的设计目的只是按顺序读取CSV内容,并不支持像列表那样直接删除或修改其中的元素。

为什么不能直接删?

DictReader会逐行读取文件,每读一行就生成一个字典,读取后不会把所有内容都存在内存里,所以它从一开始就没有提供删除行的接口,也就出现了the dictReader object does not support item deletion这个报错。

两种可行的解决方案

方案1:先把所有行读进内存,过滤后再写入(适合小文件)

这种方法简单直观,先把CSV的所有内容(包括表头)存到列表里,然后过滤掉不需要的行,最后写入新文件:

import csv

# 1. 读取所有行到内存
with open("your_input.csv", "r", newline="") as infile:
    reader = csv.DictReader(infile, delimiter=";")
    fieldnames = reader.fieldnames  # 保存表头
    all_rows = list(reader)  # 把迭代器转成列表,方便操作

# 2. 过滤行:保留符合条件的(相当于删除不符合的)
# 把下面的判断替换成你的实际条件,比如删除"age"列大于30的行
filtered_rows = [row for row in all_rows if int(row["age"]) <= 30]

# 3. 写入过滤后的内容到新文件
with open("your_output.csv", "w", newline="") as outfile:
    writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter=";")
    writer.writeheader()  # 写入表头
    writer.writerows(filtered_rows)  # 写入所有符合条件的行

方案2:逐行读取并写入(适合大文件,节省内存)

如果你的CSV文件很大,全部读进内存会占用太多资源,可以边读边写,只保留需要的行:

import csv

with open("your_input.csv", "r", newline="") as infile, open("your_output.csv", "w", newline="") as outfile:
    reader = csv.DictReader(infile, delimiter=";")
    writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames, delimiter=";")
    writer.writeheader()  # 先写入表头

    # 逐行处理:符合条件的才写入
    for row in reader:
        # 替换成你的判断条件,比如保留"status"为"active"的行
        if row["status"] == "active":
            writer.writerow(row)

注意事项

  • 建议先备份原文件,避免操作失误导致数据丢失
  • 如果需要覆盖原文件,可以在过滤完成后,用新文件替换原文件(或者先删除原文件再重命名新文件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:29:41