从pickle文件加载字典的所有对象

0 投票
1 回答
2126 浏览
提问于 2025-04-18 15:46

我设置了一个程序,可以接收用户输入并根据这些输入创建一个对象。然后,这个对象会被存储在一个字典里,接着这个字典会被保存到一个.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)

撰写回答