Python 正确地酸洗和拆开字典
我刚刚开始使用Python3.4.0中的Pickle模块,并尝试将其应用于处理类别和单词的简单程序。到目前为止,它按计划存储所有内容,但当我尝试将转储到文件中的内容加载回时,结构似乎为空:Python 正确地酸洗和拆开字典,python,pickle,Python,Pickle,我刚刚开始使用Python3.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_
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")
我不确定问题在哪里,我希望我已经足够清楚了
谢谢。您正在向文件中添加数据。因此,第一个数据集是空字典,您在其中读取,第二个数据集是填充字典,您再也不会读取。您必须在写入之前返回0。很抱歉问这个问题,但是为什么你要使用
pickle
而不是像JSON这样更现代的/可移植的/人类可读的格式?或者甚至是shelve
来处理看起来像dict的东西,但实际上是在幕后序列化的。我读到有更好的方法来处理这种情况,但是我在大学的Python课上被要求使用Pickle。我会远离搁置
模块和json
。两者都是非常有限的解决方案。Pickle提供了一种扩展自身的简单方法,因此,如果您足够持久,可以扩展它来序列化整个python语言。那为什么要用泡菜呢?如果要创建一组更健壮的序列化对象,可以进行pickle。有关扩展pickle以序列化python中几乎所有内容的示例,请参阅。如果你想要一个更好的架子,那就看看吧。此外,作者被pickle困住了,所以pickle就是。