Import file using string as name
Possible Duplicate:
Dynamic module import in Python
我打算在不久的将来制作一套文件,组织它的最好方法是有一个列表,这个列表将在文件的最顶端,在它之后,将出现一个荒谬的代码来处理列表控制的内容和它的操作方式。我只想写一次上述列表,上述列表是文件夹和文件名的列表,格式如下:
1 | [(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)] |
如你所见,
我面临的问题是使用这种方法导入…
1 2 3 4 5 6 7 8 9 | for (testName, auto, hardware, bit) in testList: print(testName) paths ="\" + testName print paths addpath(paths) sys.modules[testName] = testName # One of a few options I've seen suggested on the net print("Path Added") test = testName +".Helloworld()" eval(test) |
因此,对于我拥有的每个测试,打印名称,组装一个包含路径的字符串(
正如你所看到的,我目前必须在顶部列出一个导入列表。我不能简单地导入
我已经看到了一些这样做的例子,但是在我的环境中找不到任何有效的例子。如果有人真的能扔下一块代码,那就太好了。
我也会要求我没有挂起,画,或四分之一使用eval,它是在一个非常控制的环境中使用的(它的循环列表在.py文件中,所以没有"最终用户"应该处理它)。
不确定我是否正确理解了所有内容,但您可以使用
1 2 | mod = __import__(testName) mod.HelloWorld() |
编辑:我不知道python文档不鼓励在用户代码中使用
这也应该有效,并且会被认为是更好的风格:
1 2 3 4 | import importlib mod = importlib.import_module(testName) mod.HelloWorld() |
我会避免直接使用
将模块所在的路径添加到sys.path。使用接受字符串变量作为模块名的导入函数导入模块。
1 2 3 4 | import sys sys.path.insert(0, mypath) # mypath = path of module to be imported imported_module = __import__("string_module_name") # __import__ accepts string imported_module.myfunction() # All symbols in mymodule are now available normally |