テンプレート (template) を使うと、PEP 292で解説されているように より簡潔に文字列置換 (string substitution) を行えるようになります。 通常の"%" ベースの置換に代わって、テンプレートでは以下のような 規則に従った"$"ベースの置換をサポートしています:
上記以外の書き方で文字列中に"$" を使うとValueError を送出します。
バージョン 2.4 で 新たに追加 された仕様です。
string モジュールでは、上記のような規則を実装した Template クラスを提供しています。 Template のメソッドを以下に示します:
template) |
mapping[, **kws]) |
mapping[, **kws]) |
その他の例外も発生しうる一方で、このメソッドが「安全 (safe)」 と呼ばれているのは、置換操作が常に例外を送出する代わりに利用可能な 文字列を返そうとしているからです。別の見方をすれば、 safe_substitute() は区切り間違いによるぶら下がり (dangling delimiter) や波括弧の非対応、Python の識別子として無効な プレースホルダ名を含むような不正なテンプレートを何も警告せずに 無視するため、安全とはいえないのです。
Template のインスタンスは、次のような public な属性を 提供しています:
Templateの使い方の例を以下に示します:
>>> from string import Template >>> s = Template('$who likes $what') >>> s.substitute(who='tim', what='kung pao') 'tim likes kung pao' >>> d = dict(who='tim') >>> Template('Give $who $100').substitute(d) Traceback (most recent call last): [...] ValueError: Invalid placeholder in string: line 1, col 10 >>> Template('$who likes $what').substitute(d) Traceback (most recent call last): [...] KeyError: 'what' >>> Template('$who likes $what').safe_substitute(d) 'tim likes $what'
さらに進んだ使い方: Template のサブクラスを導出して、 プレースホルダの書式、区切り文字、テンプレート文字列の解釈に 使われている正規表現全体をカスタマイズできます。 こうした作業には、以下のクラス属性をオーバライドします:
他にも、クラス属性pattern をオーバライドして、正規表現パターン 全体を指定できます。オーバライドを行う場合、pattern の値は 4 つの名前つきキャプチャグループ (capturing group) を持った 正規表現オブジェクトでなければなりません。これらのキャプチャグループは、 上で説明した規則と、無効なプレースホルダに対する規則に対応しています:
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。