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
相关产品推荐
相关产品推荐

