【发布时间】:2018-01-07 03:23:40
【问题描述】:
每个人。
我正在修改存储字典和稍后检索它们的方法,将它们加载到现有字典值中并替换它们。
我打算用它来将游戏数据存储在一个简单的基于文本的游戏中。
# Player dictionaries
p1 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
p2 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
p3 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
p4 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
p5 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
p6 = {'name' : "placeholder", 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0,
'atk': 0, 'def': 0, 'cyra' : 0, 'monero' : 0, 'bits': 0, 'dollars': 0,
'nordas': 0,}
#save function
import pickle
def save() :
f = open("p1.txt","w")
f.write( str(p1) )
f.close()
f = open("p2.txt","w")
f.write( str(p2) )
f.close()
f = open("p3.txt","w")
f.write( str(p3) )
f.close()
f = open("p4.txt","w")
f.write( str(p4) )
f.close()
f = open("p5.txt","w")
f.write( str(p5) )
f.close()
f = open("p6.txt","w")
f.write( str(p6) )
f.close()
print ("The game was saved.")
令我高兴的是,我发现这确实有效,它在保存程序的文件夹中创建了六个文件名“p1.txt”、“p2.txt”等。它看起来和原来的字典一模一样:
{'name': 'placeholder', 'hp': 0, 'str': 0, 'stm': 0, 'mana': 0, 'atk': 0, 'def': 0, 'cyra': 0, 'monero': 0, 'bits': 0, 'dollars': 0, 'nordas': 0}
但是,在尝试创建 import_save() 函数时,我遇到了问题。我不能使用unpickle(),因为这不是我首先导出字典的方式。有关如何解决此问题的任何提示?
我也在寻找一种方法,让导入的字典可以覆盖现有的字典?我找不到任何关于它的信息...如果需要,我不反对重写代码。
【问题讨论】:
-
只是一个想法,但为什么不改用
jsonmodule。此外,IMO 也最好在with上下文中打开。 -
如果您向我们展示您的
import_save()函数可能会有所帮助 -
为什么还要6个文件?只需将所有字典或另一个字典添加到列表中,然后使用
json.dump将其存储在单个文件中(然后使用json.load再次读取) -
Patrick Haugh 我同意,this answer 具有
pickle替代使用json并避免不应命名的危险邪恶功能 -
我不是
json的粉丝,因为并非所有的 Python 字典都符合jsonstandard。我可能会使用ast.literal_eval或pickle
标签: python