如何修改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
相关产品推荐
相关产品推荐

