【发布时间】:2016-08-16 20:48:29
【问题描述】:
我试图通过遍历包含所有类实例的列表(每个类实例在实例化时将自身附加到适当的列表)来取消保存在单独的 .pkl 文件中的各种类实例。
这有效:
# LOAD IN INGREDIENT INSTANCES
for each in il:
with open('Ingredients/{}.pkl'.format(each), 'rb') as f:
globals()[each] = pickle.load(f)
例如,一种成分是Aubergine:
print(Aubergine)
输出:
Name: Aubergine
Price: £1.00
Portion Size: 1
但是,这不起作用:
# LOAD IN RECIPE INSTANCES
for each in rl:
with open('Recipes/{}.pkl'.format(each.name), 'rb') as f:
globals()[each] = pickle.load(f)
我只能假设问题源于each.name 用于配方的文件名,而each 用于配料文件名。然而,这是故意的,因为食谱的 name 属性是为最终用户格式化的(即包含空格等)。我认为这可能是问题所在,但我不确定。
成分和配方类都使用:
def __repr__(self):
return self.name
例如:
我有一个配方类实例SausageAubergineRagu,其中self.name 是'Sausage & Aubergine Ragu',它在rl 列表中。我试过单独测试这个:
输入:
rl
输出:
[Sausage & Aubergine Ragu]
所以我相信这段代码:
# LOAD IN RECIPE INSTANCES
for each in rl:
with open('Recipes/{}.pkl'.format(each.name), 'rb') as f:
globals()[each] = pickle.load(f)
...应该是这样的:
with open('Recipes/Sausage & Aubergine Ragu.pkl', 'rb') as f:
globals()[SausageAubergineRagu] = pickle.load(f)
但尝试访问配方类实例会导致 NameError。
最后一点 - 请不要问我为什么要这样做。相反,帮助我解决和解决问题,这样我就可以让它发挥作用,并了解正在发生的事情。赞赏:)
【问题讨论】:
-
为什么这个问题被否决了?
标签: python class filenames pickle