
本文详解如何使用 python 的 csv 模块将用户输入的多组数据逐行追加写入 csv 文件,避免因误用写入模式导致数据被覆盖,并提供健壮、可读性强的循环录入实现方案。
本文详解如何使用 python 的 csv 模块将用户输入的多组数据逐行追加写入 csv 文件,避免因误用写入模式导致数据被覆盖,并提供健壮、可读性强的循环录入实现方案。
在 Python 中向 CSV 文件写入多行数据时,一个常见误区是每次循环都以 'w'(写入)模式打开文件——这会导致文件内容被清空重写,最终只保留最后一行。正确做法是:仅在循环外一次性以 'a'(追加)模式打开文件,后续所有 writerow() 调用均自动添加到文件末尾。
以下是优化后的完整代码示例:
import csv
# 使用 'a' 模式追加写入,配合 with 语句确保安全关闭文件
with open('valores.csv', 'a', newline='') as f:
writer = csv.writer(f)
# 初始化 continue 变量,确保进入循环
continue_input = 'y'
while continue_input.lower().startswith('y'):
name = input("Name: ")
registration = input("Registration: ")
section = input("Section: ")
location = input("Location: ")
# 写入当前行(自动换行,无需手动处理)
writer.writerow([name, registration, section, location])
# 在本轮末尾询问是否继续(关键!不能放在循环开头或写入前)
continue_input = input("Continue? Y/N: ").strip()
print("ok")
✅ 关键要点说明:
- 'a' 模式替代 'w':open(..., 'a') 确保新数据始终追加到文件末尾,不会删除已有记录;
- newline='' 参数必不可少:防止在 Windows 系统下出现空行(csv.writer 依赖该参数控制换行符);
- with 语句保障资源安全:自动关闭文件,避免因异常导致文件句柄泄露;
- continue_input.lower().startswith('y'):兼容大小写及缩写(如 "Y", "yes", "yep"),提升用户体验;
- 输入与写入逻辑分离:先收集完整一行数据,再统一写入,避免中途中断造成脏数据。
⚠️ 注意事项:
- 若需首次运行时清空旧数据,可在 with 之前添加 open('valores.csv', 'w').close();
- 建议为 CSV 文件添加表头(如首次写入前检查文件是否为空),可通过 f.seek(0, 2) 判断文件长度或使用 os.path.getsize();
- 生产环境中应加入异常处理(如 try/except 捕获 IOError 或用户输入中断 KeyboardInterrupt)。
通过以上方式,即可稳定、高效地实现交互式多行 CSV 数据录入,真正满足“输入一行、保存一行、持续追加”的实际需求。











