首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Pickle帮助

Python Pickle帮助
EN

Stack Overflow用户
提问于 2010-08-05 00:30:20
回答 2查看 3.5K关注 0票数 1

我不确定为什么这个Pickle示例没有同时显示这两个字典的定义。据我所知,"ab+“应该是指pickle.dat文件被追加并可被读取。我对整个pickle概念都是新手,但是网上的教程似乎并不仅仅局限于初始存储。

代码语言:javascript
复制
import cPickle as pickle

def append_object(d, fname):
    """appends a pickle dump of d to fname"""
    print "append_hash", d, fname
    with open(fname, 'ab') as pickler:
        pickle.dump(d, pickler)

db_file = 'pickle.dat'

cartoon = {}
cartoon['Mouse'] = 'Mickey'
append_object(cartoon, db_file)

cartoon = {}
cartoon['Bird'] = 'Tweety'
append_object(cartoon, db_file)

print 'loading from pickler'
with open(db_file, 'rb') as pickler:
    cartoon = pickle.load(pickler)
print 'loaded', cartoon

理想情况下,我希望使用for循环构建一个字典,然后将键:值对添加到pickle.dat文件中,然后清除字典以节省一些内存。

这里发生了什么事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-05 01:13:22

不要用泡菜做这个。使用数据库。

Python dbm module似乎完美地满足了您的需求。它为您提供了一个类似字典的界面,但数据保存在磁盘上。

示例用法:

代码语言:javascript
复制
>>> import dbm
>>> x = dbm.open('/tmp/foo.dat', 'c')
>>> x['Mouse'] = 'Mickey'
>>> x['Bird'] = 'Tweety'

明天你可以加载数据:

代码语言:javascript
复制
>>> import dbm
>>> x = dbm.open('/tmp/foo.dat', 'c')
>>> print x['Mouse']
Mickey
>>> print x['Bird']
Tweety
票数 5
EN

Stack Overflow用户

发布于 2010-08-05 01:06:36

我开始编辑您的代码以提高可读性,并在此过程中排除了append_object

这里有多种混淆。首先,pickle.dump完整地编写了一个Python对象。您可以在一个pickle文件中放置多个对象,但每个对象都需要自己的load。代码按照您的要求执行了操作,并加载了您写入文件的第一个字典。第二个字典在那里等待被读取,但它不是第一个字典的串联,它是自己的可加载的。

不要低估名字的重要性。append_object不是一个很棒的名字,但它与append_to_object不同。

如果要打开一个文件进行读取,只需将其打开以进行读取,并将其用于写入或追加。它不仅能让你的意图更清晰,还能防止愚蠢的错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3407646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档