使用Python3验证多个模块

时间:2016-04-19 11:43:40

标签: python python-3.x python-module

我试图在Python 3中使用相同名称的单独文件验证多个函数。

所以,请考虑我有一个目录目录:datetime其中包含dir1s1s2,...,s3目录,每个目录都包含一个名为sn的文件。直到运行时我才知道submission.pys1是什么。

在每个sn中,有submission.pyf1的函数。

我想创建一个执行fmf1的脚本,并为每个fms1' s sn打印输出文件。

我想我可以在每个目录中导入每个submission.py文件,但问题是每个文件都有相同的名称。此外,直到运行时才知道submission.pys1。显然,我可以使用sn函数确定s1sn

在通过os.listdir()f1获取目录名称后,如何从两个不同的文件中调用os.listdir()

另一张海报建议2.7:

  

可以使用os.path.isdir()

imp

然后,要调用子目录import os, imp dirs = os.listdir('.') modules = {d: imp.load_source(d, d + '/submission.py') for d in dirs} 中包含的f3模块中的函数submission.py,它将是: s2

这将是一个完美的解决方案。任何人都可以在Python 3.4或3.5中提出类似的解决方案吗?

1 个答案:

答案 0 :(得分:0)

importlib不支持导入给定完整​​路径名,但支持从包中导入。
您可以通过在目录中添加空白s1来为每个子目录s2__init__.py等创建一个包,然后使用importlib。

因此,在每个目录中,您都有__init__.pysubmission.py

然后以下示例代码应该起作用:

import importlib
for pkg in ('s1','s2'):
    globals()['submission'] = importlib.import_module(pkg+'.submission',pkg)
    submission.f1()
    submission.f2()
    # etc...

请注意,我在Python 2上只有importlib.import_module(),Python 3有更多功能,但我希望上面的内容仍能正常工作。

并不是包含s1等的目录必须位于您的PYTHONPATH中。