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」という文字列を明確に区別でき、意図した通りの置換結果が得られます。
-
Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説
Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial
-
文字列をPythonのクラスオブジェクトに変換する方法|eval()とgetattr()の使い分け
Pythonでは、関数の引数として受け取った文字列をもとに、現在の名前空間内に同じ名前のクラスが存在する場合、その文字列からクラスオブジェクトを取得したい場面があります。例えば、設定ファイルやユーザー入力から動的にクラスを呼び出すような処理です。 本記事では、文字列をクラスオブジェクトに変換する代表的な2つの方法を、サンプルコード付きで解説します。 方法1:eval()を使う eval()関数は、渡された文字列をPythonの式として評価するため、クラス名を含む文字列を直接クラスオブジェクトに変換できます。 サンプルコード class Foobar: pass print(eval(