Python追加新数据后仍显示旧文件内容的代码修复问询
问题修复方案
你的代码存在两个核心问题,导致无法读取到更新后的排行榜内容:
- 未实际执行文件关闭操作:
file.close缺少括号(),仅引用了方法对象而非执行关闭动作,写入的内容会滞留在缓冲区未同步到磁盘,后续读取自然只能拿到旧数据。 - 文本框内容重复堆积:每次调用
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
相关产品推荐
相关产品推荐

