一尘不染

如何在python中使用append与pickle?

python

我需要附加一个泡菜文件(因为我一次都没有整个字典)。为此,我编写了以下代码:

 import pickle
 p={}
 p[1]=2
 q={}
 q['a']=p
 p={}
 p[2]=0
 pickle.dump(q, open("save12.p","ab"))
 f={}
 f['b']=p
 pickle.dump(f,open("save12.p","ab"))

但是,当我加载泡菜文件时,我在那里找不到字典f的值?

有人可以建议我应该如何添加一个泡菜文件吗?

另外,像“ dbm”这样的数据库无法满足我的需求,因为我正在Windows上工作


阅读 316

收藏
2020-12-20

共1个答案

一尘不染

腌制流完全是独立的,因此解腌将一次解腌一个对象。

因此,要释放多个流,应重复释放该文件,直到得到EOFError为止:

>>> f=open('a.p', 'wb')
>>> pickle.dump({1:2}, f)
>>> pickle.dump({3:4}, f)
>>> f.close()
>>> 
>>> f=open('a.p', 'rb')
>>> pickle.load(f)
{1: 2}
>>> pickle.load(f)
{3: 4}
>>> pickle.load(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
EOFError

这样您的代码便会看起来像

import pickle
objs = []
while 1:
    try:
        objs.append(pickle.load(f))
    except EOFError:
        break
2020-12-20