我正在使用Python 2.7.8而我正在尝试编写一个简单的基于文本的游戏。为了使它能够正常工作,我希望能够将某些变量保存到文本文件中,然后在下次运行程序时将它们作为变量加载。理想情况下,我我想将每个变量存储在自己的行上,但我不太确定如何实现这一点。编辑:这是我的相关代码:
https://gist.github.com/anonymous/3a14fcd68b0045b2c0c0
出于某种原因,代码在启动时崩溃。 抱歉,因为我对Python有点新意。无论如何,有没有更好的方法将此信息写入文件?另外,我可以用什么来读取该文件中的变量并将其作为变量存储在游戏中?
编辑:我现在学到了一些非常有用的东西,可以让我调试。以下是shell在运行代码时所说的内容:https://gist.github.com/anonymous/bfc085d8d1d0b7969574
非常感谢。
答案 0 :(得分:3)
使用ConfigParser示例创建“保存文件”,如下所示:
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')
答案 1 :(得分:2)
此问题最有力的解决方案是pickle
您要存储的数据:https://docs.python.org/2/library/pickle.html
粗略地说,Pickle取一个物体并将其变成一个弦。你以后可以" unpickle"将对象取回的字符串。
如果您的数据很简单并且您希望能够手动查看和修改,那么对于您来说,酸洗可能过于复杂。 在这种情况下,我强烈建议的一种可能性是使用XML或JSON作为数据存储格式。 它们可以灵活地表示像哈希表和列表这样的结构,这些格式更简单(包括你自己可能定义的大多数格式)都缺乏。
答案 2 :(得分:0)
有很多方法可以做到这一点! ConfigParser,shelve,sqlite,pickle等。
我会做一些非常简单的事情。例如,创建两个函数" get_value(name)"和" set_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)
这将为每个值创建一个文件。如果这太笨重,我会切换到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!