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

如何修改Python CSV代码实现多行追加写入而非覆盖?

问题根源与修改方案

原代码每次写入覆盖内容的核心原因是用了w模式打开文件——这个模式会清空文件原有内容后再写入,循环里每次打开都会把之前的内容删掉,最后只剩最后一次写入的数据。除此之外代码还有几个逻辑问题,下面是完整的修正方案:

关键修改点

  • 把文件打开模式从w改成a(追加模式),或者更规范地用with语句管理文件(自动处理关闭,避免资源泄漏)
  • 不能用continue做变量名,这是Python的关键字,换成keep_going这类合法名称
  • 初始输入的第一组数据没有写入文件,需要补上
  • 循环逻辑调整为:只要用户输入Y/S(不区分大小写)就继续输入,输入N/n则终止
  • 统一变量名的大小写,避免混乱(比如Name和name混用)

修正后的完整代码

import csv

# 定义CSV文件名
csv_file = "valores.csv"

# 处理第一组输入数据
name = input("name: ")
number1 = input("number1: ")
number2 = input("number2: ")
local = input("local: ")

# 写入第一组数据(用with语句自动管理文件)
with open(csv_file, "a", newline="", encoding="utf-8") as v:
    writer = csv.writer(v)
    writer.writerow([name, number1, number2, local])

# 询问是否继续,注意不能用continue做变量名
keep_going = input("continue? Y/N: ").strip().upper()

# 循环输入直到用户输入N
while keep_going == "Y":
    name = input("nome: ")
    number1 = input("Inscrição: ")
    number2 = input("Seção: ")
    local = input("local: ")
    
    # 追加写入当前组数据
    with open(csv_file, "a", newline="", encoding="utf-8") as v:
        writer = csv.writer(v)
        writer.writerow([name, number1, number2, local])
    
    # 再次询问是否继续
    keep_going = input("continuar? S/N: ").strip().upper()

print("ok")

额外优化说明

  • 加上newline=""是为了避免Windows系统下写入CSV时出现空行
  • 指定encoding="utf-8"确保中文等特殊字符能正确保存
  • 用.strip().upper()处理用户输入,忽略大小写和前后空格,提升交互友好性
  • 把文件名单独定义,方便后续修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:00:01