将字典导出为文本文件

时间:2013-12-28 14:00:36

标签: python

游戏是关于tamaguchis,我希望tamaguchi能够记住它的最后一个大小,并且它是下次播放时的最后一个动作。我也希望日期很重要,比如如果你不玩它一周它会缩小尺寸。因此,我认为第一步是将所有相关数据保存到文本文件中,每次游戏启动时代码都会搜索文本文件并再次提取相关数据!但我甚至无法让第1步工作:(我的意思是,我不明白为什么这不起作用?

file = open("Tamaguchis.txt","w")
date = time.strftime("%c")
dictionary = {"size":tamaguchin.size,"date":date,"order":lista}
file.write(dictionary)

它说它不能导出dictonaries,只能导出文本文件的字符串。但这是不正确的,我认为你应该能够将字典放在文本文件中? :o

如果有人也知道如何计算当前日期与文本文件中保存的日期之间的差异,那么会非常感兴趣:)

对不起,如果没有问题,非常感谢!

3 个答案:

答案 0 :(得分:1)

如果你的字典只包含简单的python对象,你可以使用json模块将其序列化并写入文件。

import json
with open("Tamaguchis.txt","w") as file:
    date = time.strftime("%c")
    dictionary = {"size":tamaguchin.size,"date":date,"order":lista}
    file.write(json.dumps(dictionary))

然后可以使用loads读取相同内容。

import json
with open("Tamaguchis.txt","r") as file:
    dictionary = json.loads(file.read())

如果您的字典可能包含更复杂的对象,您可以为它们定义json序列化程序,或使用pickle模块。注意,如果使用不当,后者可能会调用任意代码。

答案 1 :(得分:0)

您需要将字典转换为字符串:

file.write(str(dictionary))

...虽然您可能希望使用picklejsonyaml来完成任务,但回读更容易/更安全。

哦,对于日期和时间计算,您可能需要查看timedelta模块。

答案 2 :(得分:0)

import pickle

a = {'a':1, 'b':2}
with open('temp.txt', 'w') as writer:
    data = pickle.dumps(a)
    writer.write(data)

with open('temp.txt', 'r') as reader:
    data2= pickle.loads(reader.read())
    print data2
    print type(data2)

输出:

{'a': 1, 'b': 2}
<type 'dict'>

如果您关注效率,ujsoncPinkle会更好。