入力に基づいてPython動的モジュールのロード
-
24-09-2019 - |
質問
私は、部分的なRSSフィードを取り込んで、完全な1を出力するプログラムを書きましたが、それはケースバイケース1です。一つのサイトのためのレシピは、他のレシピと同じではありません。それでは、私がやっていることは(インスタンスNYTやWSJのための)ドメインベース名を見ていると、それに基づいてモジュールを選択してください。私は手の前にそれぞれ、すべてのモジュールをロードする必要があり、各レシピのための論理的な条件を持っているけれども。
何必要がちょうど自分のそれぞれのフォルダ内の個々のモジュールを持っていると私は、URLのベース名を解析するとき、私はそれは、モジュールを探し、それをロードし、何らかのアクションを取ることにしたいへの道です。だから私は、モジュールから独立しているように、メインのコードベースをしたいです。私は将来的にモジュールを追加し、それらと対話するコードの部分には絶対に触れないことができるようにしたいです。
ここでは、コード例である
if "nyt" == feed:
nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
私は、個々のモジュールのパーサを呼び出して見ることができるように。私は、各ウェブサイトに基づいて、これらの多くを持っています。私はリード飼料にしたいし、その後、モジュールを探し、それをロードし、それを呼び出すことができ、その後、それが存在しない場合は、それを報告し、デフォルトの方法を試してみてください。
解決
__import__
の機能を探しているように、これが鳴ります。この関数は、import
文と同じことをしていますが、実行時にのみ知らされる可能性がありますインポートに名前を渡すことができます。
あなたが行う可能性がありますのでます:
parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)
あなたは、このようなImportError
としてキャッチ例外になるでしょう。
他のヒント
あなたが使用することができます IMPモジュールのます。