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

2 投票
3 回答
2608 浏览
提问于 2025-04-19 07:45

我正在使用Python 2.7.8,想要编写一个简单的文本游戏。为了让它运行得更好,我希望能把一些变量保存到一个文本文件里,然后下次运行程序时再把它们读回来,变成变量。理想情况下,我希望每个变量单独占一行,但我不太确定怎么做到这一点。编辑:这是我相关的代码:

https://gist.github.com/anonymous/3a14fcd68b0045b2c0c0

不知道为什么,代码在启动时崩溃了。抱歉,我对Python还不太熟悉。总之,有没有更好的方法把这些信息写入文件?另外,我可以用什么方法从那个文件中读取一个变量,并把它存储为游戏中的变量呢?

编辑:我现在学到了一些非常有用的东西,可以帮助我调试。当代码运行时,终端显示了这些信息:

https://gist.github.com/anonymous/bfc085d8d1d0b7969574

非常感谢。

3 个回答

0

有很多方法可以做到这一点!比如ConfigParsershelvesqlitepickle等等。

我会从一个非常简单的开始。例如,创建两个函数“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)

这样每个值都会创建一个文件。如果这样管理起来太麻烦,我会改用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!
2

解决这个问题最可靠的方法是使用 pickle 来存储你想要保存的数据:https://docs.python.org/2/library/pickle.html

简单来说,Pickle 就是把一个对象变成一个字符串。之后你可以通过“反序列化”这个字符串,把对象再拿出来。

如果你的数据比较简单,并且你希望能手动查看和修改它,那么使用 Pickle 可能会显得有些复杂。在这种情况下,我强烈推荐使用 XML 或 JSON 作为数据存储格式。这些格式灵活,可以表示像哈希表和列表这样的结构,而一些更简单的格式(包括你自己可能定义的大多数格式)就做不到这一点。

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')

撰写回答