加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在python中使用pickle追加?

发布时间:2020-12-20 10:34:13 所属栏目:Python 来源:网络整理
导读:我需要附加到一个pickle文件(因为我没有一个人的整个字典).所以为了做同样的事情,我写了以下代码: 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,"ab")) 但是,当我加载pickle文
我需要附加到一个pickle文件(因为我没有一个人的整个字典).所以为了做同样的事情,我写了以下代码:

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,"ab"))

但是,当我加载pickle文件时,我没有找到字典f的值吗?????

有人可以建议我应该如何附加在pickle文件中?

此外,像’dbm’这样的数据库不能满足我的需求,因为我正在使用Windows

解决方法

Pickle流完全是独立的,因此unpickling将一次取消一个对象.

因此,要取消分割多个流,您应该反复取消该文件的取消,直到获得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

所以你的unpickle代码可能看起来像

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读