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

文本文件学生GPA更新问题:写入仅保留首行其余内容丢失

问题原因分析

你的代码出现内容被清空的问题,核心有两个关键错误:

  1. 'w'模式的误用:用'w'打开文件时,Python会直接清空文件原有内容。你在遍历剩余行的循环里反复打开'w'模式,每次打开都会重置文件,最后只留下最后一次写入的内容。
  2. 记录丢失的逻辑错误:你只处理了找到目标学生后的写入,但没有保存其他未修改的学生记录。而且当你找到目标行后,文件指针已经移动到该行之后,前面的行根本没被保存下来。
修正后的代码实现

正确的做法是先把所有学生记录读入内存,修改对应记录后,再一次性写回文件:

# 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:30:58