我试图在Python 3中使用相同名称的单独文件验证多个函数。
所以,请考虑我有一个目录目录:datetime
其中包含dir1
,s1
,s2
,...,s3
目录,每个目录都包含一个名为sn
的文件。直到运行时我才知道submission.py
到s1
是什么。
在每个sn
中,有submission.py
到f1
的函数。
我想创建一个执行fm
到f1
的脚本,并为每个fm
到s1
' s sn
打印输出文件。
我想我可以在每个目录中导入每个submission.py
文件,但问题是每个文件都有相同的名称。此外,直到运行时才知道submission.py
到s1
。显然,我可以使用sn
函数确定s1
到sn
。
在通过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中提出类似的解决方案吗?
答案 0 :(得分:0)
importlib
不支持导入给定完整路径名,但支持从包中导入。
您可以通过在目录中添加空白s1
来为每个子目录s2
,__init__.py
等创建一个包,然后使用importlib。
因此,在每个目录中,您都有__init__.py
和submission.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中。