Python如何将int变量totalbal存入文本文件并修复写入内容叠加问题
问题根因
- 用
r+模式打开文件读取初始值后,文件指针会移动到文件末尾,后续每次调用write()都是在末尾追加内容,不会覆盖原有内容,所以多次点击后所有历史数值会拼接成一串存入文件。 - 代码里的
str(baltotal.write(savebal))是无效冗余代码:write()返回的是成功写入的字符数,对它做类型转换不会影响写入逻辑,你尝试的int(baltotal.write(...))也解决不了问题。
修复方案
方式1:改动最小,适配现有代码
写入前将文件指针移到文件开头,写入完成后截断文件清空旧内容残留,修改点击事件后的代码即可:
if event.type == MOUSEBUTTONDOWN: totalbal += cps savebal = str(totalbal) # 移动文件指针到文件开头 baltotal.seek(0) baltotal.write(savebal) # 截断文件,删除指针后所有残留内容 baltotal.truncate() print("Your current money is", savebal, end="\r")
方式2:更安全的文件操作逻辑(推荐)
不要全局持有文件句柄,每次写入时用w模式打开文件直接覆盖,自动处理文件资源释放,避免指针管理失误:
import pygame, sys, time from pygame.locals import * # 初始化读取数值 with open("clickpersecond.txt", "r") as f: cps = int(f.read()) with open("totalbal.txt", "r") as f: totalbal = int(f.read()) pygame.init() clock = pygame.time.Clock() while True: # 主游戏循环 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == MOUSEBUTTONDOWN: totalbal += cps savebal = str(totalbal) # w模式打开会直接覆盖整个文件内容 with open("totalbal.txt", "w") as f: f.write(savebal) print("Your current money is", savebal, end="\r") pygame.display.flip() clock.tick(30)
内容的提问来源于stack exchange,提问作者Zgn
相关产品推荐
相关产品推荐

