在 python 中按名称从腌制文件中恢复对象

Restore objects from pickled file by name in python

使用Python 2.7。 有没有办法从 pickle 文件中只恢复指定的对象?

使用与 previous post:

相同的示例
import pickle

# obj0, obj1, obj2 are created here...

# Saving the objects:
with open('objs.pickle', 'w') as f:
    pickle.dump([obj0, obj1, obj2], f)

现在,我只想恢复 obj1

我正在做以下事情:

with open('objs.pickle', 'r') as f:
    obj1=pickle.load(f)[1]

但是假设我不知道对象的顺序,只知道它的名称。 写这篇文章,我猜名字在酸洗过程中被删除了?

没有。 Python 对象没有 "names"(除了一些例外,例如 functions 知道它们的声明名称),名称只是指向对象,对象甚至在运行时也不知道它的名称,因此也不能持久化在 pickle 中。

也许您需要 a dictionary

您可以使用字典为每个对象提供名称,而不是将对象存储在列表中:

import pickle

s = pickle.dumps({'obj0': obj0, 'obj1': obj1, 'obj2': obj2})

obj1 = pickle.loads(s)['obj1']

项目的顺序不再重要,实际上没有顺序,因为正在恢复字典。

我不能 100% 确定这就是您想要的。您是否希望仅恢复感兴趣的对象,即不解析和恢复其他对象?我认为如果不编写您自己的解析器或相当程度的黑客攻击,就无法用泡菜来完成。