pythonのTemplate使用マニュアル

2332 ワード

Templateは間違いなく良いもので、文字列のフォーマットを固定して、繰り返し利用することができます.同時にTemplateは開発者に文字列のフォーマットとその内容を別々に考慮させることができ,開発者の圧力を無形に軽減した.
Templateはstringのクラスに属するので、使用する場合は以下のように呼び出すことができます.

from string import Template

Templateには、次のルールを持つ特別なマーカー$があります.
主な実装方法は$xxxであり、xxxはpythonの命名規則を満たす文字列であり、すなわち数字で始まることができず、キーワードなどではない.
$xxxが他の文字列と接触する必要がある場合は、{}でxxxを包むことができます(以前は'()'を使用していたようですが、私の参考書にはこのように書かれていますが、現在のバージョンでは'{}')しか使用できません).例えばaaa${xxx}aaa
Templateには2つの重要な方法があります.substituteとsafe_substitute.
どちらのメソッドも、パラメータを取得して文字列を返すことができます.

>>s=Template(There $a and $b)
>>print s.subtitute(a='apple',b='banana')
There apple and banana
>>print s.safe_substitute(a='apple',b='banbana')
There apple and banbana

辞書を取得して直接データを渡すこともできます.

>>s=Template(There $a and $b)
>>d={'a':'apple','b':'banbana'}
>>print s.substitute(d)
There apple and banbana

これらの違いは、パラメータが欠けている場合の処理方法です.
Templateの実装は、まずTemplateによって文字列を初期化することである.これらの文字列にはkeyが含まれています.substituteまたはsafe_を呼び出すsubsitituteは、key値をメソッドに渡されたパラメータに対応させ、指定された位置に文字列をインポートします.この方式の1つの利点はprint'%s'のような方法ではなく、keyが正しい限り、値が正しく挿入される各パラメータの順序が固定されなければならないことです.このようにして、多くのデータを挿入するときにほっとすることができます.しかし、このようなサボる方法があっても、間違いがないことは保証できません.keyが1つ少なく入力したらどうしますか.
substituteは厳粛な方法で、keyが入力されていない場合は、必ずエラーを報告します.見苦しいですが、問題を見つけることができます.
safe_substituteはエラーを報告するのではなく、$xxxを結果文字列に直接入力します.

there apple and $b

このようなメリットはプログラムがいつも正しいので、一つ一つの間違いに頭を悩ませる必要はありません.
Templateは継承され、そのサブクラスはいくつかの「個性化」操作を行うことができます.
delimiterフィールドを変更すると、$文字を「#」などの他の文字に変更できますが、新しいマーカーは正規表現の仕様に合致する必要があります.
idpatternを変更することでkeyのネーミングルールを変更することができます.例えば、最初の文字の先頭がaでなければならないことを規定することは、仕様のネーミングに役立ちます.もちろん,これも正則表現によって実現される.

from string import Template
class MyTemplate(Template):
  delimiter = "#"
  idpattern = "[a][_a-z0-9]*"
def test():
  s='#aa is not #ab'
  t=MyTemplate(s)
  d={'aa':'apple','ab':'banbana'}
  print t.substitute(d)
if __name__=='__main__':
  test()