YAMLにおける変数の置換
YAML ではアンカーとエイリアスを提供しています。
アンカーを指定すれば、エイリアスでこれを参照することができます。
アンカーは&
で、エイリアスは*
で示されます。
name: &default_name alice
name1: *default_name
以上を YAML パーサーで読み取ると、name1 の値は alice で埋められます。
でも、以下のように文字列の一部を置き換えたい場合、アンカーとエイリアスだと機能しません。
name: alice
greeting: "hello, {{name}}"
この場合は、テンプレートエンジン Jinja を利用します。
import yaml
import jinja2
from pathlib import Path
yml_file = Path('test.yml')
yml_name = yml_file.name
yml_path = yml_file.parent
with open(yml_file) as yml:
config = yaml.safe_load(yml)
env = jinja2.Environment(loader=jinja2.FileSystemLoader(yml_path))
template = env.get_template(yml_name)
data = yaml.safe_load(template.render(**config))
print(data)