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

Python追加新数据后仍显示旧文件内容的代码修复问询

问题修复方案

你的代码存在两个核心问题,导致无法读取到更新后的排行榜内容:

  1. 未实际执行文件关闭操作:file.close缺少括号(),仅引用了方法对象而非执行关闭动作,写入的内容会滞留在缓冲区未同步到磁盘,后续读取自然只能拿到旧数据。
  2. 文本框内容重复堆积:每次调用saveleader都会向文本框追加内容,旧的排行榜信息不会被清除,导致显示混乱。

修改后的代码:

def saveleader(self):
    # 用with语句自动管理文件,无需手动关闭,确保写入内容同步到磁盘
    with open('Leaderboard.txt', "a") as file:
        file.write(f"{Timestable.name.get()} , {Timestable.age.get()} , {str(data.percent)}%\n")
    
    # 读取更新后的文件内容
    with open("Leaderboard.txt", "r") as file1:
        file_content = file1.read()
    
    headers = " ".join(["Name", "Age", "Score"])
    output = [i.split(" , ") for i in file_content.split("\n") if i]
    # 增加异常处理,避免分数格式错误导致排序失败
    try:
        out_sort = sorted(output, key=lambda x: int(x[2][:-1]), reverse=True)
    except (IndexError, ValueError):
        out_sort = output  # 格式异常时保持原顺序
    
    final = "\n".join([headers, "-"*len(headers), *(" ".join(i) for i in out_sort)])
    # 先清空文本框再插入新内容,避免重复显示旧数据
    Timestable.my_text.delete(1.0, END)
    Timestable.my_text.insert(END, final)

关键修改说明:

  • 使用with语句操作文件:代码块结束后自动关闭文件,确保缓冲区内容写入磁盘,彻底避免手动关闭遗漏的问题。
  • 添加文本框清空逻辑:Timestable.my_text.delete(1.0, END),每次插入新排行榜前清除旧内容,保证显示最新数据。
  • 增加异常处理:防止因分数格式错误(如缺失、非数字)导致排序崩溃,提升代码稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:01:17