我不确定为什么这个Pickle示例没有同时显示这两个字典的定义。据我所知,"ab+“应该是指pickle.dat文件被追加并可被读取。我对整个pickle概念都是新手,但是网上的教程似乎并不仅仅局限于初始存储。
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文件中,然后清除字典以节省一些内存。
这里发生了什么事?
发布于 2010-08-05 01:13:22
不要用泡菜做这个。使用数据库。
Python dbm module似乎完美地满足了您的需求。它为您提供了一个类似字典的界面,但数据保存在磁盘上。
示例用法:
>>> import dbm
>>> x = dbm.open('/tmp/foo.dat', 'c')
>>> x['Mouse'] = 'Mickey'
>>> x['Bird'] = 'Tweety'明天你可以加载数据:
>>> import dbm
>>> x = dbm.open('/tmp/foo.dat', 'c')
>>> print x['Mouse']
Mickey
>>> print x['Bird']
Tweety发布于 2010-08-05 01:06:36
我开始编辑您的代码以提高可读性,并在此过程中排除了append_object。
这里有多种混淆。首先,pickle.dump完整地编写了一个Python对象。您可以在一个pickle文件中放置多个对象,但每个对象都需要自己的load。代码按照您的要求执行了操作,并加载了您写入文件的第一个字典。第二个字典在那里等待被读取,但它不是第一个字典的串联,它是自己的可加载的。
不要低估名字的重要性。append_object不是一个很棒的名字,但它与append_to_object不同。
如果要打开一个文件进行读取,只需将其打开以进行读取,并将其用于写入或追加。它不仅能让你的意图更清晰,还能防止愚蠢的错误。
https://stackoverflow.com/questions/3407646
复制相似问题