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

如何修改CSV指定行单字段值 且可同步对数据进行运算处理

实现方案

原有代码核心问题

  • 索引使用错误:需求要求校验索引为1的第二个字段是否为USA,原有代码错误判断line[2],同时误将国家字段当做价格字段转int,会直接抛出类型错误
  • CSV reader是单向迭代器:遍历一次后文件指针已到末尾,后续再次遍历无法读取到任何内容
  • 语法错误:写入行的代码[row[0], row[1], ,new_price]存在多余逗号,无法运行
  • 文件打开模式错误:只读模式打开的文件无法执行写入操作

小文件最优实现(先读入内存处理)

3行3列的文件体积极小,直接读入内存处理逻辑更简单,无需临时文件:

import csv

# 读取所有行并打印原内容
all_rows = []
with open("countries.csv", "r", newline="", encoding="utf-8") as f:
    reader = csv.reader(f, delimiter=";")
    for row in reader:
        print(*row, sep=";")
        all_rows.append(row)

# 逐行处理USA对应价格
for row in all_rows:
    if row[1] == "USA":
        # 价格乘2后替换原字段
        row[2] = str(int(row[2]) * 2)

# 写回处理后的内容到原文件
with open("countries.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f, delimiter=";", quoting=csv.QUOTE_MINIMAL)
    writer.writerows(all_rows)

大文件临时文件方案

如果后续处理大文件内存放不下,使用临时文件方案只需一次遍历完成所有操作即可:

import csv
import os

with open("countries.csv", "r", newline="", encoding="utf-8") as old_file, \
     open("countries.tmp", "w", newline="", encoding="utf-8") as tmp_file:
    reader = csv.reader(old_file, delimiter=";")
    writer = csv.writer(tmp_file, delimiter=";", quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        # 打印原行内容
        print(*row, sep=";")
        # 处理USA行价格
        if row[1] == "USA":
            row[2] = str(int(row[2]) * 2)
        # 写入临时文件
        writer.writerow(row)

# 用处理后的临时文件替换原文件
os.replace("countries.tmp", "countries.csv")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:15:02