如何替换txt文件中的单词

时间:2013-02-14 01:31:43

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

好的,所以基本上我正在制作一个涉及高分的简单游戏。 如果比之前的高分更大,我希望保存高分。 这是我的代码。我有一些不同的错误,其中一些涉及我在字符串和整数之间切换以及其他错误,因为我的代码是完全错误的。我试着去理解这个问题,但是新的错误似乎还在继续。

hisc = open("Hscore.txt", "r+")
hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
if score > highscore:
    hiscore = hiscore.replace(hiscore, score)
    hisc.write(hiscore)

这是我最后一次尝试。这可能是100%错误,我尽我所能。 我需要的是每当我运行游戏时它都会显示我的高分。如果我的分数大于我的高分,则文本文件中的高分将被更改。然后重新加载到游戏中以便在此代码中再次执行操作。

1 个答案:

答案 0 :(得分:3)

您的代码存在的问题是,当hiscore.replacehiscore时,您正试图致电int

我不确定你为什么要首先使用replace。用不同的字符串替换字符串的一部分很有用。如果您想要替换整个事物,只需指定一个新值:hiscore = score

hisc = open("Hscore.txt", "r+")
hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
if score > highscore:
    hiscore = score
    hisc.write(hiscore)

然而,你有第二个问题:你正在写一个int到一个文件,当你想要的(我认为)是int的字符串表示正好是3个字符。所以,用这个代替最后一行:

    hisc.write('{:3}'.format(hiscore))

同时,以"r+"模式打开文件可能无法完成您的想法。在Python 3中,“读指针”和“写指针”总是在“r +”文件的相同位置。因此,如果您读取3个字符,然后写入3个字符,则最终会覆盖字符3-6,或者在最后添加3个新字符,而不是根据需要覆盖字符0-3。您可以在seek(0, 0)之后调用read来处理此问题。

最后,你永远不会close该文件,这意味着你所写的任何内容都可能永远不会被保存 - 它可能会在内存中的缓冲区中存在,并且永远不会被刷新到实际的磁盘文件中。这里可能更简单,只需打开读取,然后关闭,然后打开写入,然后关闭,这样你就不必担心所有seek废话了。关闭文件的最简单方法是使用with语句。

所以,把它们放在一起:

with open("Hscore.txt", "r") as hisc:
    hiscore = hisc.read(3) # 3 because the max score would never reach 1000
highscore = int(hiscore)
if score > highscore:
    with open("Hscore.txt", "w") as hisc:
        hisc.write('{:3}'.format(score))

但这取决于Hscore.txt保证存在(在当前工作目录中)并且在其中有数字的事实。如果某些错误导致你在那里粘贴“x”,或者完全清空文件,那么每次运行时都会出现异常,并且永远无法恢复。所以,你可能想要这样的东西:

try:
    with open("Hscore.txt", "r") as hisc:
        hiscore = hisc.read(3) # 3 because the max score would never reach 1000
    highscore = int(hiscore)
except IOError as e:
    print('Warning: couldn't open "Hscore.txt": {}'.format(e))
    highscore = 0
except ValueError as e:
    print('Warning: couldn't convert "{}" from "Hscore.txt" to an integer: {}'.format(hiscore, e))
    highscore = 0

这样,它会打印出一条警告,希望能帮助你找出错误,并尝试恢复(假设丢失或损坏的文件意味着高分为0)。

open文档和io module Overview解释了大部分内容,但它并不完全适合初学者。本教程中的Reading and Writing Files可能会更有帮助。