2015-03-13 64 views
0

我试图从另一个目录中的独立.py文件中读取以下数据,具体为:“assets.ovs.screen0”。这里从模块名称检索值?

展是assets.ovs.screen0.placement的内容:

selection_Size = [600,110] 
selection_Loc = [1500-600,208] 
selection_Mov = [0,115] 

在树的根部是一个文件,test.py,正在阅读:

import assets.ovs.screen0.placement as placement 

requiredVar = "select_" 

print placement.select_Size 
print eval("placement."+ requiredVar) 

假设有一个更安全/更简单的方法来做到这一点,它会是什么?

+0

如果我理解正确的话,你想通过名称获得属性。尝试 'val = getattr(obj,'attr_name',default_value)'。另见(https://docs.python.org/2/library/functions.html#getattr) – jandob 2015-03-13 18:23:00

回答

2

我可以尝试这种方式:

param = ["selection_Size", "selection_Loc", "selection_Mov", "error"] 
for par in param: 
    print par, placement.__dict__.get(par, None) 

    # this should work too 
    # print par, getattr(placement, par, None) 

输出:

selection_Size [600, 110] 
selection_Loc [900, 208] 
selection_Mov [0, 115] 
error None 
+0

嘿,那可行。谢谢! – Kweb123 2015-03-13 18:30:51

+0

我认为他应该更好地使用'getattr()'而不是'__dict __。get()'查找。 (http://stackoverflow.com/a/14084917/2972353) – jandob 2015-03-13 18:32:24

+0

为什么模块不会有字典?这个答案是面向课堂的。 – Kweb123 2015-03-13 18:36:24