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

时间:2015-02-22 14:13:33

标签: python file text logical-operators

我已经为我的游戏确定了基于文本文件的保存系统,用关键字存储所需变量的值 - 例如,密码告诉游戏要播放哪个章节。但是,它似乎出现故障,我无法理解为什么。

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

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中,程序结束并返回>>>行。

如果有办法修复此代码,那么很好 - 但是另一个执行相同操作的代码也可以正常工作。

1 个答案:

答案 0 :(得分:1)

您的行包含换行符,并且包含这些换行符。从行中剥离这些:

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()str.partition()来修改密码。您应该直接遍历lines列表 ,而不是使用range()生成索引:

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