【发布时间】:2016-01-05 11:03:56
【问题描述】:
我怎样才能pickle一个字典对象在一个文件(Python文件1)和pickle.load在另一个文件(Python文件2)中包含一个类的实例?
我有一个由多个文件组成的庞大复杂数据集,我创建了一个类来存储我的所有属性。我制作了一个字典来存储所有的样本和属性。键 = 样本,值 = 包含属性的类的实例。示例如下:
#Python File 1
import random
class Storage:
def __init__(self,label,x,y):
self.label = label; self.x = x; self.y = y
def get_x(self): return(self.x)
def get_y(self): return(self.y)
D_var_instance = {}
L = ["A","B","C"]
for var in L:
D_var_instance[var] = Storage(label=var,x=random.random(),y=random.random())
print(D_var_instance["A"])
#<__main__.Storage instance at 0x102811128>
print(D_var_instance["A"].get_x())
#0.193517721574
用我的真实数据集制作这个需要很长时间,我尝试使用 pickle 和 pickle.dump 字典对象,但它不起作用:
#Python File 1
import pickle
pickle.dump(D_var_instance,open("/path/to/dump.txt","w"))
pickle.dump(Storage, open("/path/to/storagedump.txt","w"))
我尝试使用以下代码加载另一个 Python 文件:
#Python File 2
import pickle
Storage = pickle.load(open("/path/to/storagedump.txt","r"))
D_var_instance = pickle.load(open("/path/to/dump.txt","r"))
收到此错误:
AttributeError: 'module' object has no attribute 'Storage'
【问题讨论】:
-
我希望我不需要腌制一个类的每个实例......那会很糟糕,因为我有成千上万的实例。
-
您是否尝试在您尝试加载泡菜的文件中定义相同的
Storage类?此外,您应该使用二进制模式打开文件以读取/写入pickle (b)。 -
@O.rka 我使用了完全相同的文件路径。我根据您的示例对其进行了建模。让我知道你想让我尝试什么。我已经把它设置在这里运行了。
-
我刚刚想通了。为你写一个答案。
标签: python class dictionary machine-learning pickle