我如何if ($(evt.target).attr('class') == 'exampleClass')
在一个文件(Python文件1)中包含类实例的字典对象和另一个文件中的pickle
(Python文件2)?
我有一个由几个文件组成的巨大复杂数据集,我创建了一个类来存储我的所有属性。我制作了一个字典来存储所有的样本和属性。 key = sample,value =包含atributes的类的实例。示例如下:
pickle.load
我需要很长时间才能使用我的真实数据集进行此操作,我尝试使用#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文件:
#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 File 2
import pickle
Storage = pickle.load(open("/path/to/storagedump.txt","r"))
D_var_instance = pickle.load(open("/path/to/dump.txt","r"))
答案 0 :(得分:1)
这里的问题可以通过这个SO帖子here
来完美解释最终,这里发生的事情是,当你腌制你的实例时,你必须能够适当地引用你的模块来腌制它。
所以,要显示一些代码来说明这一点。你可以这样做(解释如下):
storage.py
class Storage(object):
pass
foo.py
import pickle
from storage import Storage
D_var_instance = {}
L = ["A","B","C"]
for var in L:
D_var_instance[var] = Storage(label=var,x=random.random(),y=random.random())
pickle.dump(D_var_instance, open("/path/pickle.txt", "wb"))
boo.py
D_var_instance = pickle.load(open("/path/pickle.txt", "rb"))
所以,当你从foo编写你的pickle时,你的引用现在是storage.Storage
。当你进入一个完全不同的模块(boo.py)并尝试unpickle时,这里发生的事情是你试图加载一些参考模块的东西,这个模块不能从你从哪里开始工作。
现在可以用不同的方式解决这个问题。由于我将所有内容组织在同一级别,因此您实际上不需要导入任何内容,它应该可以工作!
但是,如果你碰巧在同一模块中写了你的课程和泡菜写作,那么你必须在boo.py
我建议你查看我链接的SO帖子中提供的两个选项,看看哪一个满足你。但这应该是你的解决方案。
从iPython运行此脚本会产生:
ipython boo.py
{'A': <storage.Storage instance at 0x1107b77e8>, 'C': <storage.Storage instance at 0x1107b7680>, 'B': <storage.Storage instance at 0x1107b7908>}