4

Python f-strings と連携して使用されるブラケット表記 {} を含む文字列を含む yaml ファイルがある場合、ここで f-string 補間をどのように活用できますか? たとえば、次の単純な yaml ファイルを見てください。

# tmp.yaml
k1: val1
k2: val2 as well as {x}

の場合x = 'val3'、k2 の値を反映させたいval2 as well as val3

# app.py
x = 'val3'
with open('tmp.yaml', 'rt') as f:
    conf = yaml.safe_load(f)

print(conf)
{'k1': 'val1', 'k2': 'val2 as well as {x}'}

これは、フォーマット文字列を使用して非常に簡単に実現できます...

print(conf['k2'].format(x=x))
val2 as well as val3

しかし、f-strings で同じことを行うにはどうすればよいでしょうか?

4

2 に答える 2

1

jinja2この問題に対する最も簡単な解決策を提供することがわかりました。

ソース yaml ファイル:

# tmp.yaml
k1: val1
k2: val2 as well as {{ x }}

ファイルを読み取り、jinja テンプレートを使用してレンダリングします。

with open('tmp.yaml', 'rt') as f:
    conf = f.read().rstrip()

print(conf)
# 'k1: val1\nk2: val2 as well as {{ x }}'

import jinja2
template = Template(conf)
conf = template.render(x='val3')
config = yaml.safe_load(conf)

print(config)
# {'k1': 'val1', 'k2': 'val2 as well as val3'}
于 2019-08-19T22:08:38.907 に答える