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

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后缀的逻辑,避免用户遗漏后缀导致文件格式异常。

额外优化建议

  1. 服务输入验证:添加逻辑确保用户输入的服务在可选列表内,避免无效数据:
    while True:
        service = input("输入选择的服务(需与上方显示一致): ")
        if service in services:
            break
        print("输入错误,请选择上方列出的服务!")
    
  2. 金额格式验证:检查输入的金额是否为有效数字,避免后续统计功能出错。
  3. 日期格式验证:使用datetime模块校验输入的日期是否符合MM/DD/YYYY格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:41:05