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

如何仅修改CSV文件每行第三列内容,解决_csv.writer不可迭代报错

问题原因分析
  • 错误builtins.TypeError: '_csv.writer' object is not iterable的直接原因是csv.writer是仅用于写入的工具对象,不支持遍历迭代,你无法通过for line in writer读取原有文件内容
  • 原有代码存在逻辑错误:一开始就用w模式打开CSV文件,会直接清空文件所有原有内容,根本无法读取原来的前两列数据
  • 写入行的代码里把line[0]、line[1]加了引号,会直接写入固定字符串而不是原行列的实际值,也不符合需求
优化实现方案

方案1:小文件场景(全量读取修改后回写,实现简单)

import csv

new_age = "25"
# 第一步:读取原文件所有内容
rows = []
with open('friends.csv', mode='r', encoding='utf-8') as read_file:
    reader = csv.reader(read_file, delimiter=';', quotechar='"')
    for row in reader:
        # 保证行至少有3列再修改,避免索引报错
        if len(row) >= 3:
            row[2] = new_age
        rows.append(row)

# 第二步:把修改后的内容写回原文件
with open('friends.csv', mode='w', encoding='utf-8', newline='') as write_file:
    writer = csv.writer(write_file, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(rows)

方案2:大文件场景(逐行读写避免占满内存,安全性更高)

import csv
import os

new_age = "25"
# 先写入临时文件,避免中途出错损坏原文件
with open('friends.csv', mode='r', encoding='utf-8') as read_file, \
     open('friends_temp.csv', mode='w', encoding='utf-8', newline='') as write_file:
    reader = csv.reader(read_file, delimiter=';', quotechar='"')
    writer = csv.writer(write_file, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        if len(row) >= 3:
            row[2] = new_age
        writer.writerow(row)

# 用修改完成的临时文件替换原文件
os.replace('friends_temp.csv', 'friends.csv')
注意事项
  • 如果CSV文件包含表头不需要修改第三列,可以在遍历第一行时直接跳过修改逻辑
  • 写入时新增newline=''参数是为了避免Windows系统下写入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 22:27:04