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

时间:2016-03-09 10:32:24

标签: python pickle

使用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]

但是,我们说我不知道​​对象的顺序,只知道它的名字。 写这个,我猜测在酸洗过程中名字会被丢弃?

2 个答案:

答案 0 :(得分:3)

没有。 Python对象没有“名称”(除了一些例外,如函数知道它们的声明名称),名称只是指向对象,而对象做即使在运行时也不知道它的名字,因此也不能坚持在泡菜中。

也许你需要a dictionary而不是。

答案 1 :(得分:1)

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

import pickle

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

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

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

我并非100%确定这是你想要的。你希望只恢复感兴趣的对象,即不解析和恢复其他对象吗?我不认为可以在不编写自己的解析器或相当程度的黑客攻击的情况下完成泡菜。