从pickle文件加载字典的所有对象
我设置了一个程序,可以接收用户输入并根据这些输入创建一个对象。然后,这个对象会被存储在一个字典里,接着这个字典会被保存到一个.pkl文件中。任何写入这个文件的新对象都使用以下代码:
def save_object(obj, filename):
with open(filename, 'ab') as output:
pickle.dump(obj, output, -1)
现在,当我重新打开程序时,我需要加载字典中的所有内容,我尝试用以下代码来实现:
self.load_file = open("Obj_file.pkl", 'rb+')
self.employee_dict = pickle.load(self.load_file)
print self.employee_dict
根据我的理解,这段代码只会加载前两个对象,而我在运行代码时确实看到的结果也是这样。它只打开了前两个对象。我该如何加载整个字典呢?根据我做的研究,这似乎有点困难。而且,对于我的程序来说,使用字典是非常重要的,因为对象会从中被删除,我需要在这个过程中保持顺序不变。
1 个回答
2
你以追加模式打开了你的pickle文件;这意味着会在文件的末尾写入一个新的pickle记录,而文件开头的内容会保持不变。
所以,当你重新打开程序并从文件中读取pickle时,你只会读取到最开始的那个版本。
对于你的需求,直接以写入模式打开文件会简单得多,这样每次都会用新的字典内容替换掉文件里的所有内容:
def save_object(obj, filename):
with open(filename, 'wb') as output:
pickle.dump(obj, output, -1)