2012-04-24 17 views
1

私はいくつかのシミュレーションを実行するPythonスクリプトを書いていますが、入力パラメータ(約20)が多くなります。だから、私はすべてのシミュレーションパラメータを外部ファイルに含めることを考えていました。これを行う最も簡単な方法は何ですか?私が見つけた外部ファイルをPythonに組み込む

一つの答えは、スタックオーバーフローで質問How to import a module given the full path?、ファイルparm.py内のすべてのシミュレーションパラメータを置くとIMPパッケージを使用してそのモジュールをインポートしました。

これにより、このスクリプトを実行するユーザーは、入力として任意のファイルを提供できます。私はそのようにモジュールをインポートした場合:

parm = imp.load_source('parm', '/path/to/parm.py') 

を、すべてのパラメータが

parm.p1, parm.p2 

として参照する必要があるしかし、私はちょうど私の中などP1、P2、としてそれらを参照したいですスクリプト。それを行う方法はありますか?

+2

をあなたは「インポート*」のようなものを探している - はお勧め。 。 http://stackoverflow.com/questions/2360724/in-python-what-exactly-does-import-importの回答を参照してください。 – gimel

+0

解決策:しないでください。とにかく、コードをトレースするのがはるかに難しくなるので、一般的には 'import ...'からのインポートを行うべきではありません。 –

+0

私はシミュレーションのためのパラメータのリストをユーザに提供し、彼が供給しないパラメータについては、デフォルトが使用されるようにしたい。だから、私は自分のコードを実行して、パラメータのすべてのデフォルト値を割り当てた後、ユーザーが提供したすべての変数を上書きするexecfile( 'parm.py')を実行することを考えていました。これを行うよりエレガントな方法はありますか? – Spot

答えて

7

外部ファイルから任意のコードをインポートすることは悪い考えです。

コンフィギュレーションファイルにパラメータを入れて、それを読むためにPythonのConfigParserモジュールを使用してください

例えば:

==> multipliers.ini <== 
[parameters] 
p1=3 
p2=4 

==> multipliers.py <== 
#!/usr/bin/env python 

import ConfigParser 

config = ConfigParser.SafeConfigParser() 
config.read('multipliers.ini') 


p1 = config.getint('parameters', 'p1') 
p2 = config.getint('parameters', 'p2') 

print p1 * p2 
+1

ちょうど私が探していた、ありがとう! – Spot

1

これにはexecfile()を使用できますが、別の方法をすべて考慮する必要があります。

+0

これを行う簡単な方法はありますか?しばらく私はそれらをコマンドラインで引数として渡すことを考えていましたが、あまりにも多くのものがあります。 – Spot

+0

@スポート:はい、あります、[私の答え](http://stackoverflow.com/a/10292160/78845) – Johnsyweb

関連する問題