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
相关产品推荐
相关产品推荐

