string Template クラス

% による文字列のフォーマット出力を書くことが多いが、
string Templateクラスの機能も
忘れてはならない。

テンプレートは、$文字接頭辞

from string import Template

t = Template('$a is $b : $c')

substitute( テンプレートの対象名=値 、、、

from string import Template

s = t.substitute(a='Apple', b=True, c=datetime.now())
print(s)
# Apple is True : 2020-12-15 20:02:05.479734

substitute に、dict を渡して実行

data = {
    'a': 'Banana',
    'b': 180,
    'c': True
}
s = t.substitute(data)
print(s)
# Banana is 180 : True

もちろん、t.substitute(**data) と書いても結果は同じ

テンプレートに対して値が不足する時

data = {
    'a': 'Lemon',
    'b': 90
}
s = t.substitute(data)

string.py で、KeyError が発生する。

    return str(mapping[named])
KeyError: 'c'

テンプレートなので、以下のように同じ置き換え対象が2個以上あっても良い。

t = Template('$a is $b : $a')

これは、string.format() 関数で以下と同じです。

s = "{0} is {1} ; {0}".format('a','b','c')


'c’が対象にならずに、結果、

a is b ; a

になります