我写了一个程序,接收部分 rss 提要并输出完整的,但这是一个个案。一个站点的配方与另一个站点的配方不同。所以我所做的是查看域基本名称(例如 nyt 或 wsj)并根据它选择一个模块。尽管我需要事先加载每个模块,并且每个配方都有一个逻辑条件。
我需要的是一种将各个模块放在各自文件夹中的方法,当我解析出 url basename 时,我希望它查找模块、加载它并采取一些操作。所以我希望主代码库独立于模块。我希望将来能够添加模块,并且永远不要触及与它们交互的代码部分。
这是一个代码示例
if "nyt" == feed:
nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
如您所见,我调用了单个模块的解析器。我有很多基于每个网站的。我想要芦苇饲料然后能够寻找模块,加载它并调用它,然后如果它不存在报告它并尝试默认方法。
最佳答案
听起来您正在寻找 __import__
功能。此函数与 import
语句执行相同的操作,但允许您将名称传递给 import,该名称可能仅在运行时才知道。
所以你可能会这样做:
parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
您需要捕获异常,例如 ImportError
。
关于Python 基于输入的动态模块加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180539/