我有一个在 python 2.7 中看起来像这样的数据结构
myfile.py
--parsers
--folder1
file1.py
def filemethod(data=None)
pass
在文件夹parsers下,我可以添加很多子文件夹
我将永远知道我想调用的函数的名称
如何导入解析器目录,以便我可以在每个子目录中找到方法并从 myfile.py 访问。我使用 getattr 将名称转换为函数对象。这是必要的,因为我从对 redis 队列的远程调用中获取要调用的函数的名称。
import ??????
methodToCall = getattr('filemethod', 'file1')
methodToCall(data)
最佳答案
动态导入的一个好方法是使用 imp.load_source()
:
import imp
module = imp.load_source( 'mymodule', module_full_path )
在你的情况下它会是这样的:
module = imp.load_source( 'file1', '.\parsers\file1.py')
methodToCall = getattr( module, 'filemethod' )
methodToCall( data )
确保替换 'file1'
和 '.\parsers\file1.py'
使用所需的模块名称及其源文件的正确路径。
关于python和子目录的动态导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17120807/