import语句python中的变量

时间:2016-10-18 05:44:49

标签: python python-2.7

我正在尝试将我从bash转换为python的脚本。程序的工作方式是它在顶级文件夹中有一个主脚本,然后在子文件夹中有一些较小的,更专业的脚本。这些较小的脚本可能具有诸如foo_bar.x,bar_foo.x,foo_baz.x,foo_qux.x,bar_qux.x等名称。主脚本将收集变量(在文件或命令行参数中定义)并使用以下语法执行相应的脚本:

VAR1=foo
VAR2=bar
./Scripts/${VAR1}_${VAR2}.x

这将执行Scripts / foo_bar.x

现在我试图在python中做同样的事情。这些脚本现在是名为foo_bar.py,foo_qux.py等模块的文件夹中的模块。目前,他们唯一拥有的是:

def test():
        print "This is foo_bar."

(或其中任何一个)。

如果使用这些命令,则会发生这种情况:

>>> import Modules.foo_bar
>>> Modules.foo_bar.test()
This is foo_bar.
>>> import Modules.foo_qux
>>> Modules.foo_qux.test()
This is foo_qux.
>>> a = Modules.foo_bar
>>> a.test()
This is foo_bar.

哪个好。但是,如果我想在import语句中使用变量,我无法正确获得语法。第一个变量定义为命令的字符串输出,第二个变量定义为字典条目。尝试在导入命令中使用它们会产生错误。

>>> var1 = a_file.read_value()
>>> print var1
foo
>>> print dict['var2']
bar
>>> import Modules.var1_dict['var2']
  File "<stdin>", line 1
    import Modules.var1_dict['var2']
                            ^
SyntaxError: invalid syntax

我认为这是一个正确引用或括号来正确调用变量的问题。我尝试了一堆涉及单引号,大括号,方括号等的组合,但没有骰子。我错过了什么?

3 个答案:

答案 0 :(得分:3)

您可以使用importlib库。并使用这样:

...
import importlib
...

    function_call = 'Modules.' + var1 + dict['var2']
    function_call = importlib.import_module(function_call) 
    function_call.test()

答案 1 :(得分:1)

如果要导入名称在变量中的模块,则需要使用__import__

例如,让我们创建一个字典,其值是模块的名称:

>>> d = { 1:'re', 2:'numpy' }

现在,让我们导入其中一个:

>>> x = __import__(d[1])
>>> x
<module 're' from '/usr/lib/python2.7/re.pyc'>

我们可以使用该模块,只要我们通过我们给它的名称来引用它:

>>> s='jerry'; x.sub('j', 'J', s)
'Jerry

而且,要导入另一个:

>>> y = __import__(d[2])
>>> y
<module 'numpy' from '/home/jll/.local/lib/python2.7/site-packages/numpy/__init__.pyc'>
>>> y.array([1,3,2])
array([1, 3, 2])

答案 2 :(得分:0)

如何动态执行import语句?

虚拟例子:

d = {"a" : "path"}
exec("import os.%s"%d["a"])
print os.path.abspath(__file__)