Python で複数行の文字列を書く:textwrap.dedent で見た目のインデントを消す

複数行の文字列は三重クォート(“”" または ‘’')で囲います。

text = """これは
複数行の
文字列だよ。"""

print(text)
これは
複数行の
文字列だよ。

三重クォート内部の改行はそのまま表現されます。三重クォートは文字列の最初の直前、最後の直後につける。もし最後の三重クォートを改行して書くと

text = """
これは
複数行の
文字列だよ。
"""

print('A' + text + 'B')
A
これは
複数行の
文字列だよ。
B

からわかるように、最後に改行が入ります。ややこしいですね。三重クォートを使った複数行の文字列は

文字列の直前に三重クォートを書く
文字列の直後に三重クォートを書く

ことを意識します。

(最初の)三重クォートの直後に文字を書くなんて嫌! 改行しないと気持ち悪い!

という人には次の方法をおすすめします。

text = """\
これは
複数行の
文字列だよ。
"""

print('A' + text + 'B')
Aこれは
複数行の
文字列だよ。
B

開始三重クォートの直後にバックスラッシュを入れると、三重クォートの次の行から文字を書けます。

インデント

インデントをつけたい場合は dedent を使います。

import textwrap

text = textwrap.dedent("""\
    インデントされた
    複数行の文字列だけど
    実際はインデントがないよ
""")

print(text)
インデントされた
複数行の文字列だけど
実際はインデントがないよ

dedent はちょっと曲者で、ユニークな挙動を示します。

from textwrap import dedent

text = """\
これは
	複数行の
	文字列だよ。
"""

print('A' + dedent(text) + 'B')
Aこれは
	複数行の
	文字列だよ。
B

インデントが消えていません。しかしすべての行にインデントをつけると

from textwrap import dedent

text = """\
	これは
	複数行の
	文字列だよ。
"""

print('A' + dedent(text) + 'B')
Aこれは
複数行の
文字列だよ。
B

すべてのインデントが削除されます。もっとおもしろい実験を紹介します。タブをさらに入れて二つのインデントを入れると

from textwrap import dedent

text = """\
	これは
	複数行の
		文字列だよ。
"""

print('A' + dedent(text) + 'B')
Aこれは
複数行の
	文字列だよ。
B

一つだけインデントが入った行はインデントが消えます。