gpt4 book ai didi

python - 使用 cPickle 仅返回文件中的第一个条目

转载 作者:行者123 更新时间:2023-12-01 06:12:04 24 4
gpt4 key购买 nike

我正在使用 cPickle 将字典对象存储到文件中,并且无法获取除第一个条目之外的任何其他条目。最初,文件 tweets.pkl 为空,并且引发 EOFError。我确信这与它有关。谢谢

#!/usr/bin/env python                                                                                                                                        

from urllib import urlencode, urlopen
from simplejson import loads
from hashlib import md5
from collections import defaultdict
import json
import cPickle as pickle

def fetch_tweets(new_feeds):
dic = json.loads(new_feeds)
feeds_file = open('tweets.pkl','r+b')
try:
feeds = pickle.load(feeds_file)
except EOFError:
#THIS IS BAD
feeds = defaultdict()
feeds_file.close()
# RETURNS ONLY THE FIRST FEED ENTRY
for i in feeds.iteritems():
print str(i)

for i in dic['results']:
hash = computeHash(i['text'])

if hash not in feeds:
appendfeed(hash, i, 'tweets.pkl')


def appendfeed(hash, new_feed, file):
feed = defaultdict()
file = open(file, 'a+b')
feed[hash] = new_feed
pickle.dump(feed, file)
file.close()

def computeHash(data):
h = md5(data.encode('utf-8'))
return h.hexdigest()

最佳答案

每次调用 appendfeed 时,您都会构建一个新字典 (feed = defaultdict()),因此新字典会丢失所有先前的引用。然后,您将新的(单条目)字典附加到文件中。

如果您想像这样恢复对 dump 的多个单独调用,那么您将需要对 loadunpickle 进行多个匹配的调用,我相信。然后,每次调用都应返回一个单独的 dict,每个字典包含一个元素。

如果您想存储一个具有多个键的字典,请放弃append模式,只需在需要保存时重新pickle整个字典即可。如果您想要更有效地存储简单映射,请查看 shelveshove

关于python - 使用 cPickle 仅返回文件中的第一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5286658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com