Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取pickle中的对象数?_Python_Python 3.x_Pickle - Fatal编程技术网

Python 如何获取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文件中的对象数——比编写一个函数打开文件、不断调用
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兼容数据库,允许您存储大量对象。仅仅因为这里的书写端有大列表的内存并不意味着阅读端一定有。