Python 存储在文本文件中的变量不起作用,但应该

Python variables stored in text files not working, but should be

我已经为我的游戏选择了一个基于文本文件的保存系统,用关键字存储所需变量的值——例如,告诉游戏玩哪个章节的密码。但是,它似乎出现故障,我不明白为什么。

在开始游戏之前,我们有:

if not os.file.isfile('TSGsave{0}.txt'.format(name)):
    TSGsave=open('TSGsave{0}.txt'.format(name),'wt')
    TSGsave.write('\nw5CT$n<jfW=-#J%4Ya5@@')
    TSGsave.close()

(使用的关键字是一堆乱码,因此用户无法更改它,知道会发生什么)。这会将 w5CT$n<jfW=-#J%4Ya5@@ 添加到文本文件。然后我们有:

for i in range (len(lines)):
    if 'w5CT$n<jfW' in lines[i]:
        findpass=lines[i]
        for i in range (len(findpass)):
            if findpass[i]=='=':
                cutfrom=i+1
                password=findpass[cutfrom:len(findpass)]

取回变量(可以变化,不能写成定值)。我知道它有效,因为我在代码中添加了 print (password),它返回了 -#J%4Ya5@@。然后开始相应章节,代码为:

if password=='-#J%4Ya5@@':

但它没有启动缩进块。在 shell 处,程序结束并返回到 >>> 行。

如果有办法修复此代码,那太好了 - 但执行相同操作的另一个代码也同样有效。

您的行包含换行符,并且正在包括这些内容。从行中删除这些:

findpass = lines[i].rstrip('\n')

打印一个带有换行符的值只会在 print 之后添加一个额外的黑线。始终使用 repr() function 生成字符串的 Python 表示以查看此类字符:

>>> print '-#J%4Ya5@@\n'
-#J%4Ya5@@

>>> print repr('-#J%4Ya5@@\n')
'-#J%4Ya5@@\n'

您的解析代码过于复杂;您可以使用 str.split() or str.partition() 从行中拆分您的密码。您应该直接 遍历 lines 列表,而不是使用 range():

生成索引
for line in lines:
    if 'w5CT$n<jfW' in line:
        password = line.partition('=')[2].rstrip('\n')