Python实现循环追加多行文本至文件直至用户退出的问题求助
Costco酒店文本生成器追加写入问题修复
问题说明
编写的write_text函数用于生成会员酒店消费记录的TXT文件,但每次循环输入都会覆盖原有内容,仅能保存一行记录。需要修改为每次输入的记录追加到文件新行,直到用户输入"yes"退出,实现多行记录的保存。
问题根源
代码核心问题出在文件打开模式和换行处理上:
- 循环内使用
open(new_file, "w")打开文件:"w"是写入模式,每次打开会清空原有内容,导致每次循环都覆盖之前的记录。 - 每条记录写完后未添加换行符,即便改成追加模式,所有内容也会挤在同一行。
修复后的代码
def write_text(): print("欢迎使用Costco酒店文本生成器。") print('-'*20) new_file = input("输入文件名: ") # 自动补全TXT后缀(可选优化) if not new_file.endswith(".txt"): new_file += ".txt" while True: # 用追加模式"a"打开文件,不存在则创建,存在则在末尾追加内容 with open(new_file, "a", encoding="utf-8") as f: # 先收集所有输入,再拼接写入,提升代码可读性 name = input("输入会员姓名: ") print("可选服务: ") services = ['Conference','Dinner','Lodging','Membership Renewal'] for service in services: print(f"{service : <14}") service = input("输入选择的服务(需与上方显示一致): ") price = input("输入消费金额: ") date = input("输入完整日期(MM/DD/YYYY): ") # 拼接成一条完整记录,末尾加换行符确保每条记录单独成行 record = f"{name};{service};{price};{date}\n" f.write(record) print('-'*20) exit_input = input("是否完成输入?输入'yes'退出: ") if exit_input == 'yes': print("已退出,文件已保存。") break write_text()
关键修改点
- 文件打开模式从
"w"改为"a":"a"为追加模式,不会清空原有文件内容,只会在末尾新增内容。 - 每条记录末尾添加
\n换行符,保证每条记录单独占据一行。 - 调整输入逻辑,先收集所有字段再拼接写入,减少IO操作次数,同时让代码结构更清晰。
- 增加文件名自动补全
.txt后缀的逻辑,避免用户遗漏后缀导致文件格式异常。
额外优化建议
- 服务输入验证:添加逻辑确保用户输入的服务在可选列表内,避免无效数据:
while True: service = input("输入选择的服务(需与上方显示一致): ") if service in services: break print("输入错误,请选择上方列出的服务!") - 金额格式验证:检查输入的金额是否为有效数字,避免后续统计功能出错。
- 日期格式验证:使用
datetime模块校验输入的日期是否符合MM/DD/YYYY格式。
内容的提问来源于stack exchange,提问作者Allixar
相关产品推荐
相关产品推荐

