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

如何在Python中覆盖TXT文件内同名学生的成绩记录

如何在Python中写入学生成绩时覆盖同名学生的旧记录

问题背景

当前有一个存储学生成绩的.txt文件,内容如下:

Adam,3,2,4
Sorin,3,2,4
Sorin,0,0,0

使用的Python代码片段是追加记录到文件中,但当再次写入同名学生(比如Sorin的新成绩3,3,3)时,文件会新增重复条目,而需求是覆盖该学生所有旧记录,仅保留最新成绩,最终文件只保留Adam和最新的Sorin记录。

原代码片段:

new_record = studentName+","+str(Score1) +","+str(Score2) +","+str(Score3)
student_class = 0

while student_class != 1 or student_class != 2 or student_class != 3:
    student_class=input("What class are you in?(1/2/3): ")
    if student_class == "1":
        file=open("Class1.txt", "a+")
        file.write(new_record)
        file.write("\n")
        file.close()
        with open("Class1.txt", 'r') as fp:
            for count, line in enumerate(fp):
                pass
            break

解决方案

修改后的代码会先读取文件中所有非目标学生的记录,再将新记录写入,实现覆盖效果,同时修复原循环的逻辑错误:

# 假设studentName、Score1、Score2、Score3已提前定义好
new_record = f"{studentName},{Score1},{Score2},{Score3}"
student_class = ""

# 修复循环条件:判断输入是否为有效班级选项
while student_class not in ["1", "2", "3"]:
    student_class = input("What class are you in?(1/2/3): ")

# 根据选择的班级确定目标文件
class_file = f"Class{student_class}.txt"
updated_records = []

# 读取现有记录,过滤掉当前学生的旧记录
try:
    with open(class_file, 'r') as fp:
        for line in fp:
            line = line.strip()
            if not line:
                continue
            # 拆分每行获取学生姓名
            existing_name = line.split(',')[0]
            if existing_name != studentName:
                updated_records.append(line)
except FileNotFoundError:
    # 文件不存在时直接跳过读取步骤
    pass

# 添加最新的学生成绩记录
updated_records.append(new_record)

# 将更新后的所有记录写入文件
with open(class_file, 'w') as fp:
    fp.write('\n'.join(updated_records) + '\n')

关键说明

  • 覆盖旧记录逻辑:读取文件时筛选出非目标学生的记录,再加入新记录,相当于直接替换掉该学生的所有旧数据。
  • 修复循环错误:原代码的or逻辑会导致循环永远无法终止,改用not in判断输入是否在有效范围内,逻辑更准确简洁。
  • 安全文件操作:全程使用with语句自动管理文件的打开/关闭,避免资源泄漏;同时处理文件不存在的情况,确保首次写入正常执行。
  • 优化字符串拼接:用f-string替代原有的字符串相加,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:11:00