我写了一个程序,它接受一个部分rss feed并输出一个完整的,但它是一个个案的基础。一个站点的配方与另一个站点的配方不同。所以我要做的是查看域名basename(例如nyt或wsj)并根据它选择一个模块。虽然我需要事先加载每个模块,并为每个配方提供逻辑条件。
我需要的是一种方法,只需将各个模块放在各自的文件夹中,当我解析url basename时,我希望它查找模块,加载它并采取一些操作。所以我希望主代码库独立于模块。我希望将来能够添加模块,并且永远不会触及与它们交互的代码部分。
这是一个代码示例
if "nyt" == feed:
nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
如您所见,我调用了单个模块的解析器。我有很多这些基于每个网站。我想要reed feed然后能够查找模块,加载并调用它,然后如果它不存在则报告它并尝试默认方法。
答案 0 :(得分:3)
听起来你正在寻找__import__
功能。此函数与import
语句执行相同的操作,但允许您传递名称以进行导入,该名称可能仅在运行时已知。
所以你可以这样做:
parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
您需要捕获ImportError
。
答案 1 :(得分:1)
您可以使用imp module。