YAML 仕様内のスカラー部分の置換/置換はありません。
そのレベルでやりたいことはすべて、アプリケーションで実行する必要があります。私にとって、そして YAML にとって{{var1}}
は、ネストされたマッピングにすぎません。{{var1}}
の略です{{var1: null}: null}
。それ以降-
は不可です。
ただし、投稿には複数の問題があります。
古い (2005) YAML 1.1 のみをサポートする PyYAML を使用しています。したがって、YAML 1.2 でできるように...
、明示的なドキュメント開始 () を使用せずに複数のドキュメント (つまり、で終わる) を持つことはできません。---
---
ファイルの代わりに読み取るように最初の行を修正しても、辞書の後にスカラーを続けることができないため...
、ファイルはロードされません(から){{var1}}
-
-{{var2}}.txt
また、ファイルで使用するだけの場合{{var1}}
、PyYAML は YAML マッピングを Python dict としてロードし、Python は dict の変更可能なキーを許可しないため、これをロードできません。TypeError
やろうとしたときにPythonで取得するのと同じように:{dict(var1=None): None}
したがって、少なくとも入力ファイルall.yaml
を次のように変更する必要があります。
---
var1: val1
var2: val2
var3: '{{var1}}-{{var2}}.txt'
...
これを取得して YAML にロードします。
このファイルを 2 回ロードする必要があります。
- テンプレートをレンダリングするために使用できる値を取得するために PyYAML で 1 回
- jinja2によるテンプレートとして1回
テンプレートをレンダリングした後、その (文字列) をもう一度 PyYAML にロードすると、必要な値が得られます。
all.yaml
現在のディレクトリとこのプログラムで上記のように修正された場合:
import yaml
import jinja2
YAML_FILE = 'all.yaml'
with open(YAML_FILE) as fp:
dataMap = yaml.safe_load(fp)
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath='.'))
template = env.get_template(YAML_FILE)
data = yaml.safe_load(template.render(**dataMap))
print(data["var3"])
あなたが望むものを印刷します:
val1-val2.txt