如何将用户输入追加到无表头索引的现有CSV文件?求writelines替代方案
解决CSV追加内容的问题
你当前代码的核心问题有两个:一是writelines的用法不对(它接收可迭代的字符串序列,而非单个字符串),二是没给新内容加换行符,会导致新输入和原有内容挤在同一行,同时每次循环重复打开关闭文件也没必要。
给你两种实用的替代方案:
方案1:用write()直接追加(简单场景)
把writelines换成write,给输入内容加上换行符,同时将文件打开操作移到循环外,减少IO开销:
if user_input == 'add': x = int(input('How many questions do you want to add?')) # 只打开一次文件 with open("pyquiz.csv", 'a') as f: for _ in range(x): new_question = input('Enter your question: \n') # 写入内容并强制换行,确保每行独立 f.write(f"{new_question.strip()}\n")
如果用户输入时可能带多余换行,用strip()先清理,避免生成空行。
方案2:用内置csv模块(规范场景)
如果你的CSV字段可能包含逗号、引号这类特殊字符,手动拼接会破坏CSV格式,用csv.writer能自动处理这些情况:
import csv if user_input == 'add': x = int(input('How many questions do you want to add?')) # newline=''避免不同系统下换行符混乱 with open("pyquiz.csv", 'a', newline='') as f: writer = csv.writer(f) for _ in range(x): new_question = input('Enter your question (comma-separated): \n') # 将输入拆分为字段列表 row = new_question.split(',') writer.writerow(row)
比如输入字段是"hi, there",csv.writer会自动用引号包裹,防止CSV解析出错。
另外注意:你原本用的a+是可读可写模式,但这里只需要追加内容,用a模式足够,更高效。
内容的提问来源于stack exchange,提问作者jricks72
相关产品推荐
相关产品推荐

