有一个带有“.py”扩展名文件的目录。您需要浏览文件并仅包括那些具有特定名称函数的文件。
我只得到这个(main.py 文件):
from os import listdir
from os.path import isfile, join
import importlib
filepath = './'
for f in listdir(filepath):
if isfile(join(filepath, f)) and f != 'main.py':
moduleloader = importlib.find_loader(f.split('.')[0])
if moduleloader is not None:
# check if module has function
它到达了评论的地方,但如何检查是个问题。还有一个问题,如何进一步使用这个功能?
出去:
要加载给定路径中的所有模块,您可以使用
pkgutil.iter_modules(path). 基于 , 的变体的优势glob('*.py')在于支持其他模块格式(zip 存档,目录,如果需要)。例如,g从目录中的所有模块调用一个函数modules,不包括 Python 包和当前模块:要在模块中搜索函数,请使用
inspect.getmembers()谓词。相比之下的优点是只会找到函数,忽略其他对象,如字符串、类。请注意,一个类在 Python 中是可调用的——如果它是一个类,它可以工作,但会返回——如果你想要不同的结果,请使用不同的谓词而不是.inspect.isfunctionhasattr()CC()inspect.isfunction(C)Falseinspect.isfunction()如果路径是相对路径(例如
modules),那么它(通常)是相对于当前工作目录的,该目录可能与执行.请注意,当您导入模块时,将执行模块级别的代码。它可以是任意代码。不要导入其内容不受您控制的模块。
考虑使用预先存在的工具
unittest来py.test运行测试(如果您的模块包含测试),或yapsy插件包,或setuptools从它们的配置中已知的“入口点”setup.py(如果您的要求接近这些库所代表的功能)— 无需一次一个要求地重新发明轮子。