我可以直接加载一个我想要的对象,跳过系列中的其他对象,用于 pickle 文件吗

Can I load directly an object that I want, jumping others in the serie, for pickle files

我想解开一个我 pickle 过许多其他对象的对象。我想知道我是否可以直接加载这个。

我将几个对象腌制为:

with open(filename, 'wb') as f:
    pickle.dump(A_object, f)
    pickle.dump(B_object, f)
    pickle.dump(C_object, f)

现在在另一个代码中,我想加载 C_object,所以我这样做:

with open(filename, ‘rb’) as f:
    pickle.load(f)
    pickle.load(f)
    C_object=pickle.load(f)

它有效,但是在我的真实代码中我有很多对象,并且传递所有预览对象的过程需要很多时间。我可以直接加载 C_object 吗?

我搜索类似的内容:

with open(filename, ‘rb’) as f:
    C_object=pickle.load(f, 2)

避免我加载之前的每个对象并使我的代码更加高效。

提前致谢

虽然 pickle 不支持此功能,但这是 shelve 模块的目的。

它允许您将腌制对象的文件作为字典进行操作:您可以通过将它们与键相关联来存储事物,并通过这些键获取它们。

这是一个虚拟示例:

import shelve


class Foo:
    pass


with shelve.open("test.shelf") as shelf:
    shelf['a'] = Foo()
    shelf['b'] = Foo()
    shelf['c'] = Foo()


with shelve.open("test.shelf") as shelf:
    foo_c = shelf['c']

您可以查看 documentation for shelve 以获得更多功能。