Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの文字列テンプレートクラス(string.Template)の使い方を徹底解説

Pythonのstring.Templateクラスは、シンプルなテンプレート文字列を作成するための機能です。Python 2.4で初めて導入されました。テンプレートは、コンストラクタにテンプレート文字列を引数として渡すことで生成します。

従来の%記号を使う文字列フォーマット演算子とは異なり、Templateオブジェクトではドル記号($)をプレースホルダーの目印として使用する点が特徴です。

Templateクラスの主なメソッド

Templateクラスには、テンプレートから文字列を生成するためのメソッドが用意されています。

  • string.Template(template) ― コンストラクタです。テンプレート文字列を1つの引数として受け取ります。

  • substitute(mapping, **keywords) ― テンプレート内のプレースホルダーを、マッピング(辞書風オブジェクト)やキーワード引数で渡した値に置き換えます。マッピングとキーワード引数を同時に指定した場合は、キーワード引数が優先されます。プレースホルダーに対応する値が存在しない場合はKeyErrorが発生します。

  • safe_substitute(mapping, **keywords) ― 基本的な動作はsubstitute()と同じですが、対応する値が見つからない場合でもエラーにならず、元のプレースホルダーがそのまま残ります。これによりKeyErrorを回避できます。

公開属性:template

Templateオブジェクトには、公開されている属性が1つあります。

  • template ― コンストラクタに渡されたテンプレート文字列そのものです。読み取り専用が厳密に強制されているわけではありませんが、プログラム内でこの属性を書き換えることは推奨されません。

Pythonテンプレート文字列の基本例

from string import Template

t = Template('$when, $who $action $what.')
s = t.substitute(when='In the winter', who='Rajesh', action='drinks', what='Coffee')
print(s)

# 辞書をsubstituteの引数として渡す例

d = {"when": "In the winter", "who": "Rajesh", "action": "drinks", "what": "Coffee"}
s = t.substitute(**d)
print(s)

実行結果

In the winter, Rajesh drinks Coffee.
In the winter, Rajesh drinks Coffee.

safe_substitute()の使用例

from string import Template

t = Template('$when, $who $action $what.')
s = t.safe_substitute(when='In the winter', who='Rajesh', action='drinks', what='Coffee')
print(s)

実行結果

In the winter, Rajesh drinks Coffee.

テンプレート文字列の表示

Templateオブジェクトのtemplate属性を参照すると、元のテンプレート文字列を取得できます。

from string import Template

t = Template('$when, $who $action $what.')
print('Template String: ', t.template)

実行結果

Template String: $when, $who $action $what.

$記号のエスケープ方法

テンプレート内でドル記号そのものを出力したい場合は、$$のように$を2つ重ねてエスケープします。

from string import Template

t = Template('$$ is called $name')
s = t.substitute(name='Dollar')
print(s)

実行結果

$ is called Dollar

${identifier}形式の使い方

${<identifier>}$<identifier>と同等の意味を持ちます。この波括弧形式が必要になるのは、プレースホルダーの直後に識別子として有効な文字が続くものの、それがプレースホルダーの一部ではない場合です。たとえば${noun}ificationのようなケースが該当します。

from string import Template
t = Template('$noun adjective is ${noun}ing')
s = t.substitute(noun='Test')
print(s)

実行結果

Test adjective is Testing

このように${noun}ingと記述することで、「noun」というプレースホルダーと「ing」という文字列を明確に区別でき、意図した通りの置換結果が得られます。

  1. Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説

    Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial

  2. 文字列をPythonのクラスオブジェクトに変換する方法|eval()とgetattr()の使い分け

    Pythonでは、関数の引数として受け取った文字列をもとに、現在の名前空間内に同じ名前のクラスが存在する場合、その文字列からクラスオブジェクトを取得したい場面があります。例えば、設定ファイルやユーザー入力から動的にクラスを呼び出すような処理です。 本記事では、文字列をクラスオブジェクトに変換する代表的な2つの方法を、サンプルコード付きで解説します。 方法1:eval()を使う eval()関数は、渡された文字列をPythonの式として評価するため、クラス名を含む文字列を直接クラスオブジェクトに変換できます。 サンプルコード class Foobar: pass print(eval(