python - 读取和写入文本文件会添加无效字符

标签 python python-3.x file file-io

正在读取、解析数据,然后将新数据覆盖到文本文件中。我的问题是,写入文件会在添加我想要的内容之前在开头添加无效字符。我得到的错误是:

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 block 的想法是尝试将文件中的数据转换为整数,以便可以用它们进行数学运算,如果不能将其转换为字符,尝试删除文本文件中的第一个字符(假定为无效字符),然后重试(重新运行 __init__)。目前它有点爆炸。

我看到了有关编码的内容,并尝试了,但它没有改变任何东西。仍在添加无效字符。我有 truncate(0) 来删除文件,以便覆盖文件而不是附加数据。

最佳答案

我认为您每次执行截断时都需要退回到文件中。因此,您在执行此操作时 stats.truncate(0) 添加 stats.seek(0) 之后

关于python - 读取和写入文本文件会添加无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537218/

相关文章:

python - 使用 Python 自动化 Java 小程序

python - 单独线程中 Python 中的按键回显不显示第一个击键

python - scipy中重采样数组的索引

python - 使用 python 模块 selenium 在浏览器中输入

php - 如何检查文件中是否已存在用户名并将其积分添加到他?

python - swift中类似python的map函数

python - 小数精度的分数

python-3.x - 如何将打开的文件作为变量传递给多个函数?

java - jar 内的类的上次更新时间

file - 在 FreePascal 中读取文件