进行读取,分析数据,然后将新数据覆盖到文本文件的工作。我的问题是,写入文件是在添加我想要的内容之前在开头添加无效字符。我得到的错误是:
ValueError: could not convert string to float: '\x00\x0045.5'
45.5, 5.0
是我要写入文件的数据,每个\x00
代表在写入文件过程中添加的无效字符。通常,每次迭代都会添加10到15个。我可以手动进入文本文件并删除它们,但是这样做有什么乐趣呢?这是我的代码,而try / except是我为解决此问题而添加的内容-
def __init__(self, power):
self.name = "Dr. Strange"
self.CloakOfLevitation = "I like Dr. Strange"
self.EyeOfAgamotto = InfinityStones.TimeStone(5000 + power, self.name)
self.win = False
self.length = randint(2, 100)
stats = open("Stats.txt", 'r+', encoding = 'utf-8')
data = stats.read()
try:
avg, tries = data.split(sep = ',')
avg = float(avg)
tries = float(tries)
except ValueError:
stats.truncate(0)
stats.write(data[1:])
sleep(5)
stats.close()
self.__init__(power)
self.new_avg = avg + (self.length - avg) / tries
stats.truncate(0)
stats.write(str(self.new_avg) + ',' + str((tries + 1)))
stats.close()
此代码大部分涉及递归,
self.length
确定递归将持续多长时间,power
只是一个数字,对于这部分并不重要。 sleep(5)
在其中,因此我可以在程序运行时停止运行,以免计算机崩溃。每次将数据写入文件时,都会添加无效字符(在错误输出中表示为\x00
)。假定avg
是完成递归之前“死亡”的平均次数,而tries
是程序已运行的次数。try/except
块的想法是尝试将文件中的数据转换为整数,以便可以使用它们进行数学运算,如果无法将其转换为字符,则尝试删除文本文件中的第一个字符(可能是无效字符),然后重试(重新运行__init__
)。目前,它只是炸毁了。我看到了有关编码的内容,并尝试了一下,但没有任何改变。仍然添加了无效字符。我在那里有
truncate(0)
擦拭文件,以便覆盖文件而不是附加数据。 最佳答案
我认为您每次进行截断时都需要返回文件。所以在stats.truncate(0)
的位置添加stats.seek(0)