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

Python格式化txt学生数据写入文件时首条记录丢失问题求助

代码问题原因
  • 核心问题是缩进错误:Python通过缩进判断代码块的从属关系,你写的for x in f:后面的替换、打印、写入代码都没有缩进,不属于循环体的一部分。循环只会依次读取raw_data.txt的每一行赋值给x,但不会对这些行做任何处理,循环结束后x只会保留最后一行(也就是Student=002的记录),后续所有逻辑都只会处理这最后一行数据,自然就会丢失第一条记录,打印也只会输出最后一条的处理结果。
  • 次要问题是文件操作不规范:没有手动关闭打开的文件句柄,存在资源泄漏风险;使用追加模式a写入,如果多次运行代码会导致内容重复写入。
修正后的代码
# 使用with上下文管理器自动处理文件的打开/关闭,无需手动调用close
with open('raw_data.txt', 'r', encoding='utf-8') as read_f, open('formatted.txt', 'w', encoding='utf-8') as write_f:
    for line in read_f:
        # 所有行处理逻辑缩进后放到循环内部,每条记录都会被处理
        formatted_line = line.replace("id","Student")
        formatted_line = formatted_line.replace("name","Name")
        formatted_line = formatted_line.replace("address","Home Number")
        formatted_line = formatted_line.replace("gender","Gender")
        formatted_line = formatted_line.replace(";","\n")
        # 额外添加空行分隔不同学生的记录,格式更清晰
        formatted_line += "\n"
        print(formatted_line)
        write_f.write(formatted_line)
修正说明
  • 所有需要逐行执行的逻辑全部缩进后放到for循环内部,保证两条学生记录都会被处理、打印、写入
  • 使用with语法自动管理文件生命周期,避免资源泄漏
  • 写入模式改为w覆盖写入,避免多次运行重复追加内容,如果你确实需要保留原有内容追加写入,可以改回a
  • 变量名调整更语义化,方便维护

内容的提问来源于stack exchange,提问作者Zaim Syafiq Azam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:02