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)

Tags:

Updated: