【问题标题】:Restore objects from pickled file by name in python在python中按名称从腌制文件中恢复对象
【发布时间】:2016-03-09 10:32:24
【问题描述】:

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


【解决方案1】:

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

import pickle

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

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

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

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

【讨论】:

    【解决方案2】:

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

    也许你需要a dictionary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2017-07-10
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      相关资源
      最近更新 更多