在代码运行之间保存变量的数据

时间:2015-08-08 08:39:05

标签: python list save

对于一个学校项目,我正在用Python制作一个刽子手游戏。现在我的代码从字典中选择一个单词,如下所示:

WordList = ["cat", "hat", "jump", "house", "orange", "brick", "horse", "word"]
word = WordList[random.randint(0, len(WordList) - 1)]

现在,在运行之前必须在代码中设置单词列表,但我添加了在运行单词时向单词添加单词的功能:

if command == "add":
    while True:
        print("type a word to add to the dictionary")
        print("type /b to go back to game")
        add = raw_input("word: ")

        if add != "/b":
            WordList = WordList + [add]

            print add, "added!"
        else:
            print("returning to game")
            break
但是,一旦我退出代码,添加的单词显然没有保存,所以我要么必须手动将所有单词添加到列表中,要么每次代码启动时向列表中添加一堆单词。所以我想知道在代码完成后是否有一种简单的方法可以让变量保存,这样WordList将在下次代码启动时保留添加的单词。我用来编写python的程序是Jetbrains PyCharm,如果这有所不同。对任何不理想的代码表示歉意,我是代码新手。

3 个答案:

答案 0 :(得分:7)

简单地挑选您想要保持持久的数据。由于您的用例不需要非常复杂的数据存储,因此酸洗是一个非常好的选择。一个小例子:

import pickle

WordList = ["cat", "hat", "jump", "house", "orange", "brick", "horse", "word"]

# do your thing here, like
Wordlist.append("monty");

#open a pickle file
newfile = 'mypickle.pk'

with open(newfile, 'wb') as fi:
  # dump your data into the file
  pickle.dump(Wordlist, fi)

稍后当您需要再次使用它时,只需将其加载:

#load your data back to memory when you need it
with open(newfile, 'rb') as fi:
  WordList = pickle.load(fi)

钽哒!你现在有数据持久性。更多阅读here。一些重要的指示:

  1. 当我使用'b'打开文件时,请注意open()。我喜欢使用pickle文件作为二进制文件。当你腌制它们时,这有助于避免一些复杂的对象结构出现问题。
  2. 我使用了with命令。这样可确保在完成文件的所有工作后,文件将安全关闭。这有助于防止意外访问或覆盖我的泡菜。

答案 1 :(得分:1)

您必须使用持久存储:在添加文件时将文字写入文件,并在程序启动时从该文件中检索文字。

答案 2 :(得分:1)

如果退出代码,则停止该过程。因此,您将丢失所有数据。你必须添加保持脚本活着的单词。建议使用处理所有调用的服务器(例如:http://flask.pocoo.org/)或使用python命令输入https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output)。

但请记住......如果你停止这个过程就会丢失所有数据,这是正常的。

否则,在停止脚本之前,必须将所有数据保存到文件或数据库中,并在脚本启动时加载它们。