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

Python不使用pandas修改CSV指定行对应列值的实现方法咨询

错误原因

你现有代码的核心问题是构造行字典时错误使用了比较运算符:'Name'== "Molly Singh": r['Name'],这里==会返回True/False布尔值,相当于你把布尔值作为字典的键,直接导致列名错位、数据写入异常,最终出现文件内容清空、列变成布尔值的问题。

无Pandas的实现方案

操作前建议先备份原CSV文件,避免数据丢失。

1. 修改指定行的Status字段

实现逻辑:先读取全部CSV行数据,遍历匹配姓名为Molly Singh的行,修改对应Status值后,将全量数据重新写入CSV文件。

import csv

# 读取所有行数据
rows = []
with open("AllDetails.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    # 保留表头
    headers = reader.fieldnames
    for row in reader:
        # 匹配到目标用户则修改Status
        if row["Name"] == "Molly Singh":
            row["Status"] = "N"
        rows.append(row)

# 重新写入文件
with open("AllDetails.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=headers)
    # 写入表头
    writer.writeheader()
    writer.writerows(rows)

2. 数值列执行加减运算修改

CSV读取的所有值默认是字符串类型,操作数值列时需要先转成int/float类型完成运算,再存回即可。
举个例子:给所有行的Sno字段加1:

import csv

rows = []
with open("AllDetails.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    headers = reader.fieldnames
    for row in reader:
        # 转成整数后加1,再转字符串存回
        row["Sno"] = str(int(row["Sno"]) + 1)
        # 也可以同时执行上一个需求的修改逻辑
        if row["Name"] == "Molly Singh":
            row["Status"] = "N"
        rows.append(row)

with open("AllDetails.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=headers)
    writer.writeheader()
    writer.writerows(rows)

注意事项

  • 推荐使用with语法操作文件,会自动处理文件关闭逻辑,避免手动调用close()遗漏导致的资源异常
  • 涉及数值运算时必须先做类型转换,不能直接对字符串做加减操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:18:02