python和子目录的动态导入

标签 python python-2.7

我有一个在 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/

相关文章:

python - 除非 root 用户,否则无法导入 python 模块

python - 动态网站通过类名查找元素并使用 Selenium 和 Chrome 执行与 Python 中的类关联的 onclick 方法

python - ValueError:操作数无法与形状 (5,) (30,) 一起广播

python - 值 161137531201111100, 1.611375312011111e+17 是否相等?

Python MySQLdb 模块内存泄漏

python - 如何捕获 python 警告错误和 'bury' 呢?

java - Python 的生成器与 Java 中的生成器类似

python - Python 可以让列表更高效吗?

python - 带有某些字符串的嵌套循环如何在 python 中工作?

python-2.7 - 根据空列数移动 pandas 列