私はコンフィギュレーションファイルを処理する柔軟なシンプル-しかしウェイとしてPython execfile()
機能を使用しています - 基本的には、アイデアがある:dictへのPythonモジュールのインポート(execfile()のグローバルとして使用する)?
# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)
# Process all 'Bar' items in the dictionary.
for item in foo:
if isinstance(item, Bar):
# process item
これは私の設定ファイルは、の定義へのアクセス権を持っていることが必要ですBar
クラス。この単純な例では、それは簡単です。私たちは空のdictではなくfoo = {'Bar' : Bar}
を定義することができます。しかし、実際の例では、ロードしたいモジュール全体があります。そのための1つの明らかな構文は次のとおりです。
foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)
はしかし、私はすでにトップレベルのファイルにBarModule
を輸入してきたので、私はちょうど直接BarModule
によって定義されたもののセットとしてfoo
を定義することができるはずのように思えますこのeval
とimport
のチェーンを通過する必要はありません。
これを行うには単純な慣用方法がありますか?
私はevalfileファイルが存在しません。あなたはexecfileを意味しますか? –
Pythonは式と文を区別しているので、evalを使うのは明らかなアイデアではありません。 evalは式を評価することができます(例えば 'eval( '2 + 2')')、execは文(例えば 'exec 'a = 2 + 2')です。インポートはステートメントです。 –
@ÉricAraujo:私はexecfileを意味しました。編集が行われました。 –