MoのWebLog

思ったことをテキトウに。

Here Document (ヒアドキュメント) に感動した話

今までパラメータの多い文書を作成する際には,
pythonで .replace を使用した自作スクリプトを用いて

creat.py template parameters values

みたいな感じで三つのテキストファイルを引数として置換していたのですが,
Here Documentという表記法を教えていただいたので,そちらを使用してみました。
今回私はPythonで書きましたが,Here Document自体は様々な言語で対応されていて,
シェル( sh, csh, tcsh, ksh, bash, zsh,...)やPerl, PHP, Rubyなどでも記述可能です。

環境
motsuo$ python -V
Python 2.7.10
motsuo$
コード例

(日本語を使用する前提なので# -*- coding: utf-8 -*-を書いています。)

motsuo$ cat heredoc-template.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

string = ('''\
A & B = {A_B}
next is {C}
D\
''').format(A_B="ab", C="c")
print(string)
motsuo$
出力結果
motsuo$ ./heredoc-template.py
A & B = ab
next is c
D
motsuo$
まとめ

string = '''
改行もそのまま扱いたい長い文章
アイウエオ
'''
とすることで'''で括った中をHere Documentとして扱うことができます。
例の様に,パラメータを使用したい場合はヒアドキュメント内で{param}と書き,
.format(param="value")とすることで置換してくれます。(これは別に変数展開なのでHere Documentどうこうは関係ない)
注:パラメータ名に"-" ハイフンは使用できません(自分はこれを知らず長い時間詰んでしまった。。。)


これだと,自分の書いたスパゲッティーコードで読み込んで置換しているわけじゃないから,置換ミスの心配が減るし,
パラメータと値を,直感的に管理しやすいから楽でいいなと感じました。
pythonでのformat()を用いた変数置換は,この記事の記述以外にも,リストとかタプルとか辞書とか使えるので,
好きなの選べて素敵ですね。
変数置換の書式についてはこちら(リンクは最新版3.6のドキュメント。2.7の同項目についてはページ左上のプルダウンから見られます)
6.1. string — 一般的な文字列操作 — Python 3.6.5 ドキュメント