4

私は科学シミュレーション パッケージを使用しています。このパッケージでは、「実験」を実行するたびに複数のテキスト ベースの入力ファイルが必要です。これらのファイルはかなり長くなる可能性があり、多数のボイラープレート セクションが含まれます。ただし、特定の「実験固有」の値は、これらのファイル内の多くの場所に入力する必要があります。

これらのファイルの生成を自動化し、保守可能な方法で行いたいと考えています。

現在、私が作成した Python スクリプトを使用しています。これは、テキストの三重引用符ブロックと変数置換 (% と .format() を使用) を使用してファイルにセクションを作成するものです。次に、これらのブロックを適切なファイルに書き出します。

結果の入力ファイルで適切な審美的なインデントを説明することは困難であることがわかっています。さらに、自動生成スクリプトは、処理できるシミュレーションとオプションの種類を拡張するにつれて、ますます不透明になっています。

このタスクをよりエレガントで保守しやすい方法で管理する方法について提案がある人はいますか?

jinja のようなテンプレート パッケージを認識しています。これらには、html のようなファイルを生成する以外に利点がありますか? 上記の目的でこれらを使用した人はいますか?

おそらく、まったく異なるアプローチの方が良いでしょう。

どんな提案でも大歓迎です。

4

2 に答える 2

2

Jinjaは、作成するファイルの種類を気にしません。バイナリでない限り、テキストはテキストです。ジンジャが気にするかどうかさえわかりません。

IPython、特に nbconvert は、Jinja2 を使用してLaTeX、 ipynb、markdown などをエクスポートします。

デモが必要な場合に備えて、Jinja2 マジックを備えた IPython ノートブックもあります。

于 2013-09-13T05:05:31.690 に答える
1

この種の問題に対する私の通常のアプローチは、ボイラープレートの生成とカスタマイズに役立つ関数の小さなライブラリを作成することです。あなたの実験定義言語がどのようなものかはわかりませんが、一般的には、テキストを書き出してシミュレーションを初期化する関数、テキストを書き出してシミュレーションを終了する関数、およびその他の関数を記述する必要があります。各タイプの実験を定義するテキストのさまざまなチャンクを書き出します。

これらの関数を というファイルに入れmysimたら、次のように使用できます。

from mysim import sim_init, sim_conclude, experimentType1, experimentType2

sim_init (name="Today's Simulation", author="Simon")
for param1 in [0,1,2,3,4,5,6,7,8,20,30,40,50,60,70]:
    experimentType1 (param1)
    for param2 in ["A", "B", "C"]:
        experimentType2 (param1, param2)
sim_conclude (savefile="output.txt")

この Python スクリプトは、 の各値に対して実験タイプ 1 を実行し、 と の各組み合わせに対して実験タイプ 2 を実行するシミュレーション入力ファイルを生成しparam1ます。param1param2

関数の実装自体は複雑に見えるかもしれませんが、特定のシミュレーション ファイルを作成するスクリプトは単純明快です。

于 2013-09-13T06:01:34.273 に答える