Pythonで文字列を複数行に改行して書く

Pythonで文字列を複数行にわたって改行して記述する方法について解説します。

Pythonで文字列を複数行に改行して書く

Pythonでコードを書いている際に、URLやハッシュ値のような長い文字列を扱うことがあります。1行に文字列全体を収めようとすると可読性が悪くなるため、複数行に渡って文字列を記述したくなります。

今回は、Pythonで文字列を複数行に分けて記述する方法について解説します。紹介する3つの方法はどれもコード内での改行を実現するものですが、改行が文字列自体に反映される方法と、改行が文字列自体には反映されない方法に分かれます。

文字列に改行を反映させるなら三重引用符を使う(急いでいる人向け)

Pythonで文字列を複数行に渡って記述するには、以下のいずれかの方法を使うことができます。

  • 三重引用符・トリプルクォート('''...'''または"""...""")を使う -> 改行が文字列に反映される
  • バックスラッシュ(\)を使う -> 改行が文字列に反映されない
  • 丸括弧((...))を使う -> 改行が文字列に反映されない
# 三重引用符・トリプルクォートを使う方法
# コード上も改行するし、文字列にも改行が反映される
s = '''1行目
2行目
3行目'''

print(s)
# 1行目
# 2行目
# 3行目


# バックスラッシュを使う方法
# コード上は改行するが、文字列に改行は反映されない
s = '1行目'\
    '2行目'\
    '3行目'

print(s)
# 1行目2行目3行


# 丸括弧を使う方法
# コード上は改行するが、文字列に改行は反映されない
s = ('1行目'
    '2行目'
    '3行目')

print(s)
# 1行目2行目3行

三重引用符で改行する方法(トリプルクォート)

'''...'''もしくは"""..."""で記述される三重引用符(トリプルクォート)で囲むことで、文字列を複数行に渡って記述することができます。

これはいわゆるヒアドキュメントです。ヒアドキュメント内で改行すると、そのまま文字列内で改行として解釈されます。改行を文字列に含めたくない場合には、行末に\を追加します。

他の方法と比べて、直感的に書くことができる方法だと思います。

# トリプルクォートで複数行に渡って文字列を書く
string = """Pythonで文字列を複数行に渡って書くには、
このようにトリプルクォートを使う方法が
多用されます。"""

print(string)
# Pythonで文字列を複数行に渡って書くには、
# このようにトリプルクォートを使う方法が
# 多用されます。


# \を行末に入れると、改行を含めない
string = """Pythonで文字列を複数行に渡って書くには、\
このようにトリプルクォートを使う方法が\
多用されます。"""

print(string)
# Pythonで文字列を複数行に渡って書くには、このようにトリプルクォートを使う方法が多用されます。

トリプルクォート内部でインデントした場合には、文字列にもインデントが反映されます。

コード上はインデントさせるが、文字列にはインデントを含めたくない場合には、textwrapモジュールのdedent()メソッドを使います。dedent()メソッドは各行に共通する先頭の空白を取り除いてくれます。

# トリプルクォート内のインデントも文字列に反映される
string = """\
        Pythonで文字列を複数行に渡って書くには、
        このようにトリプルクォートを使う方法が
        多用されます。"""

print(string)
#         Pythonで文字列を複数行に渡って書くには、
#         このようにトリプルクォートを使う方法が
#         多用されます。


# textwrap.dedent()を使うと、各行に共通する空白を除去する
import textwrap

print(textwrap.dedent(string))
# Pythonで文字列を複数行に渡って書くには、
# このようにトリプルクォートを使う方法が
# 多用されます。

バックスラッシュで改行する方法

前述したように、改行をしたくない文字列であっても、コード上では改行させたい場合があります。

たとえば、URLのような長い文字列をコード内で1行で書こうとすると、1行で80文字を超えた場合にPEP8のE501 line too longという基準に抵触してしまうことがあります。

こういった場合には、バックスラッシュ(\)を使うことで、見た目上は改行をするが、文字列としては改行を無視することが可能です。つまり、文字列に改行が反映されない方法です。

# バックスラッシュを使うと改行が無視されて文字列が連結される
string = 'Pythonで改行を無視するには、'\
         'このようにバックスラッシュを使う方法が'\
         '利用されます。'

print(string)
# Pythonで改行を無視するには、このようにバックスラッシュを使う方法が利用されます。


# 文字列以外でも改行を無視することができます
calc = 10 * 10\
       * 10
print(calc)
# 1000

丸括弧で囲んで改行する方法

文字列を丸括弧(( ))で囲むことでも、文字列を複数行に渡って記述することができます。こちらも、文字列には改行が反映されない方法になります。

丸括弧を使った場合の文字列の記述方法は、以下のようになります。

# 丸括弧を使って改行する
string = (
    "Pythonで改行を無視するには、"
    "このように丸括弧を使う方法も"
    "利用されます。"
)

print(string)
# Pythonで改行を無視するには、このように丸括弧を使う方法も利用されます。