Python 如何获取pickle中的对象数?
有没有一种简单的方法可以获取pickle文件中的对象数——比编写一个函数打开文件、不断调用Python 如何获取pickle中的对象数?,python,python-3.x,pickle,Python,Python 3.x,Pickle,有没有一种简单的方法可以获取pickle文件中的对象数——比编写一个函数打开文件、不断调用pickle.load方法并将num_of_objs更新1,直到它捕获eoferor并返回值还要短 没有。pickle格式不存储该信息 如果需要该类型的元数据,则需要在编写以下内容时将其添加到文件中: pickle.dump(len(objects), fileobj) for ob in objects: pickle.dump(ob, fileobj) 现在,第一条记录告诉您还有多少条需要遵循
pickle.load
方法并将num_of_objs
更新1,直到它捕获eoferor
并返回值还要短 没有。pickle格式不存储该信息
如果需要该类型的元数据,则需要在编写以下内容时将其添加到文件中:
pickle.dump(len(objects), fileobj)
for ob in objects:
pickle.dump(ob, fileobj)
现在,第一条记录告诉您还有多少条需要遵循。没有直接的方法来确定一个pickle的长度,但是如果您害怕运行一个无休止的循环,您可以尝试以下方法
company_id_processed=[]
with open("responses_pickle.pickle", "rb") as f:
while True:
try:
current_id=pickle.load(f)['name']
company_id_processed.append(current_id)
except EOFError:
print 'Pickle ends'
break
你可以试一试。你仍然需要在整个文件上循环。如果你事先知道,为什么不一次性转储整个对象列表呢?类似于pickle.dump(objects,fileobj)@Matt:这也需要您一步再次加载该列表。如果要逐个迭代对象以节省内存,该怎么办?如果你pickle
对象
,那么你只能加载整个列表。嗯,对我来说,如果这是一个问题(你的列表太大了,可能会导致内存问题),你无论如何都不会/不应该使用pickle。但公平enough@Matt:你为什么不用泡菜?已经围绕存储pickle构建了一个跨CIONAL ACID兼容数据库,允许您存储大量对象。仅仅因为这里的书写端有大列表的内存并不意味着阅读端一定有。