2016-12-10 72 views
1

我是python的新手,我试图用pickle将几个python对象存储到文件中。我知道,同时增加新的对象,以现有的泡菜文件我可以加载现有的对象并连接新一:将python对象(字典)附加到现有的pickle文件

# l is a list of existing dictionaries stored in the file: 
l = pickle.load(open('existing_file.p', 'rb')) 
new_dict = {'a': 1, 'b':2} 
l = l + [new_dict] 
# overwriting old file with the new content 
pickle.dump(open('existing_file.p', 'rw'), l) 

我想检查是否有附加的物体,像字典到什么更好的办法现有的酸洗文件而不覆盖整个内容。 任何暗示或建议将不胜感激。

回答

1

pickle知道它的序列化对象的长度,所以你可以不断追加新的pickled对象到列表的末尾,并在以后一次读取它们。通过追加到我的泡菜文件创建一些腌制的对象,

>>> with open('test.pickle', 'ab') as out: 
...  pickle.dump((1,2,3), out) 
... 
>>> with open('test.pickle', 'ab') as out: 
...  pickle.dump((4,5,6), out) 

后,我可以读回,直到我得到的EOFError知道我做

>>> my_objects = [] 
>>> try: 
...  with open('test.pickle', 'rb') as infile: 
...   while True: 
...    my_objects.append(pickle.load(infile)) 
... except EOFError: 
...  pass 
... 
>>> my_objects 
[(1, 2, 3), (4, 5, 6)] 
+0

非常感谢。它非常完美! –