在Python中,如何将数据作为变量保存到文本文件或从文本文件加载数据?

在Python中,如何将数据作为变量保存到文本文件或从文本文件加载数据?,python,python-2.7,Python,Python 2.7,我正在使用Python2.7.8,我正在尝试编写一个简单的基于文本的游戏。为了让它正常工作,我希望能够将某些变量保存到文本文件中,然后在下次运行程序时将它们作为变量加载回。理想情况下,我希望将每个变量存储在自己的行中,但我不太确定如何实现这一点。编辑:以下是我的相关代码: 由于某种原因,代码在启动时崩溃。 抱歉,因为我对Python有点陌生。无论如何,有没有更好的方法将这些信息写入文件?此外,我可以使用什么从该文件中读取变量并将其作为变量存储在游戏中 编辑:我现在学到了一些非常有用的东西,可以

我正在使用Python2.7.8,我正在尝试编写一个简单的基于文本的游戏。为了让它正常工作,我希望能够将某些变量保存到文本文件中,然后在下次运行程序时将它们作为变量加载回。理想情况下,我希望将每个变量存储在自己的行中,但我不太确定如何实现这一点。编辑:以下是我的相关代码:

由于某种原因,代码在启动时崩溃。 抱歉,因为我对Python有点陌生。无论如何,有没有更好的方法将这些信息写入文件?此外,我可以使用什么从该文件中读取变量并将其作为变量存储在游戏中

编辑:我现在学到了一些非常有用的东西,可以进行调试。下面是shell在运行代码时所说的话:


非常感谢。

有很多方法可以做到这一点,等等

我会做一些非常简单的开始。例如,创建两个函数“get_value(name)”和“set_value(name,value)”,如下所示:

import os
import time

#######

def get_value(name):
    name += '.cfg'
    if not os.path.exists(name):
        return ''
    with open(name) as f:
        return f.read()

def set_value(name, value):
    name += '.cfg'
    with open(name, 'w') as f:
        f.write(value)

#######

if __name__ == "__main__":
    countryname = get_value('countryname')
    if not countryname:
        countryname = raw_input("What will your country be called? ")
        set_value('countryname', countryname)

    print "Welcome to %s!" % countryname
    time.sleep(0.5)
import ConfigParser

countryName = raw_input("What will your country be called? ")

config = ConfigParser.RawConfigParser()

config.add_section('Countries')
config.set('Countries', 'MyCountry', countryName)

with open('save.txt', 'wb') as saveFile:
    config.write(saveFile)
这将为每个值创建一个文件。如果这太难处理,我会切换到JSON

这就是它的作用:

$ python game.py
What will your country be called? Steveland
Welcome to Steveland!

# it remembers my answer
$ python game.py
Welcome to Steveland!

$ ls *.cfg
countryname.cfg

# reset my answer
$ rm countryname.cfg

$ python game.py
What will your country be called? Stevesylvania
Welcome to Stevesylvania!

这个问题最可靠的答案是
pickle
要存储的数据:

粗略地说,Pickle获取一个对象并将其转换为字符串。您可以稍后“取消勾选”字符串以将对象取出

如果您的数据很简单,并且您希望能够手动查看和修改数据,那么酸洗对您来说可能太复杂了。 在本例中,我强烈建议使用XML或JSON作为数据存储格式。
它们可以灵活地表示哈希表和列表之类的结构,而更简单的格式(包括您自己定义的大多数格式)将缺少这些结构。

使用ConfigParser示例,您可以创建如下“保存文件”:

import os
import time

#######

def get_value(name):
    name += '.cfg'
    if not os.path.exists(name):
        return ''
    with open(name) as f:
        return f.read()

def set_value(name, value):
    name += '.cfg'
    with open(name, 'w') as f:
        f.write(value)

#######

if __name__ == "__main__":
    countryname = get_value('countryname')
    if not countryname:
        countryname = raw_input("What will your country be called? ")
        set_value('countryname', countryname)

    print "Welcome to %s!" % countryname
    time.sleep(0.5)
import ConfigParser

countryName = raw_input("What will your country be called? ")

config = ConfigParser.RawConfigParser()

config.add_section('Countries')
config.set('Countries', 'MyCountry', countryName)

with open('save.txt', 'wb') as saveFile:
    config.write(saveFile)
运行此命令将创建一个“save.txt”文件,然后您可以使用以下命令读取该文件:

import ConfigParser
config = ConfigParser.RawConfigParser()
config.read('save.txt')

countryName = config.get('Countries', 'MyCountry')

请看一看Python wiki中的条目-应该正是您需要的。请原谅我,但我不确定我是否理解这是如何工作的。这是我的代码:
#设置保存文件savefile=“C:\Users\Slick\Documents\python\save.ini”file=open(savefile,“w”)Config.add_section('info')countryname=raw_input(“您的国家将被称为什么?”)打印“欢迎使用”+countryname+“!”time.sleep(0.5)Config.set('info','name',countryname)Config.write(savefile)
最后,我还有:
FILE.close()
文件在启动时崩溃。我做错了什么?可能只是在移动浏览器上查看,但代码中的缩进看起来一点也不正确。@AlexThomas-请不要在注释中添加代码。@AlexThomas:对于
未绑定的LocalError:assignment之前引用的局部变量'countryname',如果我说“y”对于第29行的问题,它将执行第31-35行,它没有定义
countryname
,然后它将跳到第54行,在那里它尝试使用
countryname
。您需要在第31-35行的块中添加代码来设置
countryname
。此外,代码在粘贴箱中仍然有点不正确(请参阅第39行,我认为您不希望看到这一行)。这个解决方案对我来说似乎是最容易理解的,但它不起作用,我也不知道为什么。我再次为自己是这样一个noob道歉。x)我键入的代码几乎完全正确(它在文件中的位置)但游戏只是在启动时再次崩溃。扫描拼写错误后,什么也没有发现。我将用更多的游戏代码编辑原始帖子,希望这能澄清问题。@AlexThomas我没有看到任何关于启动时崩溃的问题。请编辑它以包括回溯和任何其他相关细节。@AlexThomas请在e回溯以便我们可以帮助您调试。我注意到在您更新的代码中缩进有点不正确。也许您可以将代码放在粘贴箱上?就像我尝试了这个解决方案,在一些实现错误之后,我终于能够让它工作。我选择这个作为我接受的答案,但如果可以的话,还有一个问题:有没有办法将each变量在文本文件中自己的行中?添加更多的config.set(“节”、“variableNameToStore”、“variableInCode”)行应将它们存储在“保存文件”中在单独的行上。这是您需要的还是我遗漏了什么?是的,这是我需要的,尽管数据没有存储在单独的行上。如果您需要查看我的代码,那么我可以向您展示,但它几乎就是您在这里所拥有的,添加了另一个用于测试的
config.set