文本文件学生GPA更新问题:写入仅保留首行其余内容丢失
问题原因分析
你的代码出现内容被清空的问题,核心有两个关键错误:
'w'模式的误用:用'w'打开文件时,Python会直接清空文件原有内容。你在遍历剩余行的循环里反复打开'w'模式,每次打开都会重置文件,最后只留下最后一次写入的内容。- 记录丢失的逻辑错误:你只处理了找到目标学生后的写入,但没有保存其他未修改的学生记录。而且当你找到目标行后,文件指针已经移动到该行之后,前面的行根本没被保存下来。
修正后的代码实现
正确的做法是先把所有学生记录读入内存,修改对应记录后,再一次性写回文件:
# 1. 读取所有学生记录到内存 students = [] with open("students.txt", 'r') as file: for line in file: # 拆分每行数据并去除换行符 student_data = line.strip().split(",") students.append(student_data) # 2. 找到目标学生并修改GPA target_id = str(x) # x是用户输入的ID new_gpa = str(gpa) # gpa是用户输入的新GPA for student in students: if student[0] == target_id: student[4] = new_gpa break # 找到目标后退出循环 # 3. 将所有记录写回文件 with open("students.txt", 'w') as file: for student in students: # 把列表重新拼接成逗号分隔的行 line = ",".join(student) + "\n" file.write(line)
关键改进点说明
- 使用
with语句管理文件:自动处理文件的打开和关闭,避免资源泄漏。 - 先读全量数据到内存:确保所有记录都被保存,修改后再统一写入,不会丢失数据。
- 避免反复打开文件:只在需要写入时用
'w'模式打开一次,一次性写入所有内容。
内容的提问来源于stack exchange,提问作者Rayane
相关产品推荐
相关产品推荐

