我可以直接加载一个我想要的对象,跳过系列中的其他对象,用于 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
以获得更多功能。
我想解开一个我 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
以获得更多功能。