stringモジュールのTemplateクラスの実行テスト
あるファイルの特定の部分だけが異なるアスキーファイルを、いくつか作りたい。その場合、テンプレート機能を使うと作業が楽になる。
PythonのstringモジュールにはTemplateクラスがあり、この文字列の置き変えが自動的にできるため、Tempalteクラスを使うことにする。
最初に雛型となるテンプレートファイルを用意しておく。このファイルの中で、${}の部分が置き変える文字列(プレースホルダ)となる。下のテンプレートファイルの例だと、4箇所にいろいろな文字列を入れたファイルを作ることになる。このファイル名は、例えばfile.templateとしておく。
# a test file # 2010/11/26 line1: the 1st value is ${value_1}. line2: the 2nd value is ${value_2}. line3: ${value_3}, ${value_4} EOF
このテンプレートファイルに、具体的な値を入れたファイルを作るためのPythonコードは以下のようになる。
#!/bin/env python from string import Template fi = open('file.template', 'r') fo = open('file.new', 'w') t = Template(fi.read()) # 文字列を引数で渡す d = dict() d['value_1'] = 1.0 d['value_2'] = 2.2 d['value_3'] = 3.3 d['value_4'] = 4.4 fo.write(t.substitute(d)) fi.close() fo.close()
値を辞書で与えて、substituteメソッドを使い置換した文字列をファイルに書き込んでいる。作成されたファイル(file.new)は以下の通り。
# a test file # 2010/11/26 line1: the 1st value is 1.0. line2: the 2nd value is 2.2. line3: 3.3, 4.4 EOF
便利。
テンプレートに渡す辞書に、テンプレートに無い余計なキーが定義されていても、エラーとはならない。例えば、
d['value_5'] = 10 d['hoge'] = "12345"
が辞書dに定義されていてもよい。
逆にテンプレート中のキーが辞書dに未定義だと、KeyErrorになる。