【问题标题】:How to call a function from every module in a directory in Python? [closed]如何从 Python 目录中的每个模块调用函数? [关闭]
【发布时间】:2014-07-12 20:09:40
【问题描述】:

我想要做的是导入目录/包中的每个模块,然后在每个子模块上调用相同的函数,而不知道它们的名称或有多少。

如果你熟悉 MCEdit,(Minecraft 的第 3 方工具)它的过滤系统是这样的。所有作为过滤器的 .py 文件都放在一个目录中,然后 MCEdit 导入每个过滤器,并能够显示导入过滤器的列表并执行每个过滤器的 perform(level, box, options) 功能。

【问题讨论】:

  • 看来你需要函数来获取文件夹中的文件 - 比如os.walk()

标签: python module


【解决方案1】:

找到该目录中的每个模块,使用__import__ 导入它,然后调用该函数。例如:

for file_name in os.listdir('path/to/modules'):
    if file_name.startswith('.') or not file_name.ends_with('.py'):
        continue
    module_name = file_name[:-3]
    module = __import__(module_name)
    module.some_function()

但是,这并不适用于所有情况——特别是,某些模块可能是用 C 编写的,并且扩展名为 .pyd 而不是 .py。你想对此负责吗? sys.path 中可能有几个条目。你想支持所有这些,还是只搜索一个目录?模块可以驻留在 ZIP 文件中。你必须支持这一点。使用导入钩子,模块可能会即时生成,而可能无法枚举它们。在搜索模块时,您必须决定要走多远。但是找到它们之后,很容易导入和使用它们。

【讨论】:

  • 谢谢,我想这会很好。
猜你喜欢
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多