我正在尝试从单独的文件中验证多个函数,这些文件在python3中都具有相同的名称。你知道吗
因此,假设我有一个目录目录:dir1
,其中有s1
,s2
,s3
,…,sn
,这些目录都是目录,每个目录都包含一个名为submission.py
的文件。直到运行时,我才知道s1
到sn
是什么。你知道吗
在每个submission.py
中,都有函数f1
到fm
。你知道吗
我想创建一个脚本来执行f1
到fm
,并为每个s1
到sn
的submission.py
文件打印它们的输出。你知道吗
我想我可以导入每个目录中的每个submission.py
文件,但问题是每个文件都有相同的名称。另外,s1
到sn
直到运行时才知道。显然,我可以使用os.listdir()
函数通过sn
确定s1
。你知道吗
在通过os.listdir()
和os.path.isdir()
获得目录名之后,我如何从两个不同的文件调用f1
呢?你知道吗
另一张海报建议将此用于2.7:
This is possible using
imp
.
import os, imp
dirs = os.listdir('.')
modules = {d: imp.load_source(d, d + '/submission.py') for d in dirs}
然后,要调用子目录s2
中包含的submission.py
模块中的函数f3
,例如:
modules['s2'].f3()
。你知道吗
这将是一个完美的解决方案。有人能在python3.4或3.5中提出类似的解决方案吗?你知道吗
importlib
不支持导入给定的完整路径名,但支持从包导入。通过在目录中添加一个空的
__init__.py
,然后使用importlib,可以使每个子目录s1
、s2
等成为一个包。你知道吗所以,在每个目录中,都有
__init__.py
和submission.py
那么下面的示例代码应该可以工作:
请注意,我使用的是python2,它只有
importlib.import_module()
,python3有更多的功能,但我希望上面的内容仍然可以工作。你知道吗也不是说包含
s1
等的目录必须驻留在PYTHONPATH中。你知道吗相关问题 更多 >
编程相关推荐