正确地序列化和反序列化字典
我刚开始使用Python 3.4.0中的Pickle模块,想把它应用到一个简单的程序中,这个程序处理类别和单词。目前为止,它能按计划存储所有内容,但当我尝试从文件中加载之前保存的数据时,结构似乎是空的:
new_data = int(input("New Data File?\n 1 = Yes\n 0 = No\nChoice: "))
if (new_data == 1):
f = open('data.txt', 'wb+')
data_d = {}
pickle.dump(data_d, f)
f.close()
PrMenu()
option = int(input("Option: "))
f = open('data.txt', 'rb+')
d = pickle.load(f)
#Functions inside this menu loop receive the structure (Dictionary)
#and modify it accordingly (add/modify/clear category/word), no
#pickling/unpickling is involved
while (option != 0):
if (option == 1):
add_c(d)
elif (option == 2):
modify_c(d)
elif (option == 3):
clear_c(d)
elif (option == 4):
add_w(d)
elif (option == 5):
modify_w(d)
elif (option == 6):
clear_w(d)
elif (option == 7):
pr_cw(d)
elif (option == 8):
pr_random(d)
if (option != 0):
PrMenu()
option = int(input("Option: "))
#the output structure would be eg. {category_a:[word1, word2, word3, ...], category_b:[..., ...]}
pickle.dump(d, f)
f.close()
print("End of Program")
我不太确定问题出在哪里,希望我说得够清楚。
谢谢。
1 个回答
1
你正在往文件里添加数据。第一次你读取的是一个空的字典,第二次读取的是一个已经填满的字典,而这个填满的字典你之后就没有再读取过。你在写入之前需要把位置移动回文件的开头。