Pythonで長い文字列を複数行に分けて書く

Pythonでflake8などのPEP8に準拠したコードチェッカーを使っていると、1行が80文字を超えたときにE501 line too longというエラーが出る。 URLなどの80文字を超えるような改行を含まない長い文字列を、コード上で改行して複数行に分けて書く方法を紹介します。

バックスラッシュ(\)を使う 丸括弧を使う

改行を含む文字列に関するもろもろの処理については

また、長い文字列を折り返したり省略したりして出力・表示したい場合はtextwrapモジュールが便利です。

長い文字列ではなく、メソッドチェーンで1行の文字数が長くなってしまった場合も同様にコード上で改行することができます。

バックスラッシュ(\)を使う

Pythonにおいて、バックスラッシュ(\)は継続文字であり、行末におくとその後の改行が無視されて行が継続していると見なされます。

n = 1 + 2 \
    + 3

print(n)
# 6

また、複数の文字列リテラルを続けて書くと、以下のように連結して一つの文字列になります。

s = 'aaa' 'bbb'

print(s)
# aaabbb

この2つを組み合わせると、

s = 'https://ja.wikipedia.org/wiki/'\
    '%E3%83%97%E3%83%AD%E3%82%B0%E3%83'\
    '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E'

print(s)
# https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

と、長い文字列をコード上で複数行に分けて書くことができます。 続けて書いて連結されるのは文字列リテラル(''や""で囲まれたもの)のみで、文字列が格納された変数だとエラーになるので気をつけてください。

s_var = 'xxx'

# s = 'aaa' s_var 'bbb'
# SyntaxError: invalid syntax

変数同士や変数と文字列リテラルを連結するには+演算子を使います。

s = 'aaa' + s_var + 'bbb'

print(s)
# aaaxxxbbb

バックスラッシュ(\)で区切る場合も、変数を連結するには+演算子が必要。

s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\
    + s_var\
    + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'

print(s)
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

文字列の連結についての詳細は

丸括弧を使う

Pythonでは括弧(()、{}、[])の中では自由に改行ができます。このルールを利用して、長い文字列を括弧で囲んでしまってもよい。 なお、{}を使うと集合(set)、[]を使うとリストになってしまうので、このような使い方の場合は丸括弧()を使います。 ここでも複数の文字列を続けて書くと連結して一つの文字列になることを利用すると、以下のように書けます。

s = ('https://ja.wikipedia.org/wiki/'
     '%E3%83%97%E3%83%AD%E3%82%B0%E3%83'
     '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E')

print(s)
# https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

バックスラッシュを使った例と同様に、変数を含む場合は+演算子が必要。

s = ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
     + s_var
     + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')

print(s)
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

関連カテゴリー Python 文字列操作

PythonでUnicodeエスケープされた文字列・バイト列を変換 Pythonでファイル内の任意の文字列を含む行を抽出(grep的処理) Pythonのスライスによるリストや文字列の部分選択・代入 Pythonで数字の文字列strを数値int, floatに変換 Pythonで2進数、8進数、16進数の数値・文字列を相互に変換 Pythonで文字列の長さ(文字数)を取得 Pythonで半角1文字、全角2文字として文字数(幅)カウント Pythonのf文字列(フォーマット済み文字列リテラル)の使い方 Pythonでリストや文字列を逆順に並べ替え(reverse, reversed) Pythonで文字列・数値を右寄せ、中央寄せ、左寄せ Pythonのprint関数で文字列、数値および変数の値を出力 Pythonで文字列生成(引用符、strコンストラクタ) Pythonで文字列のリスト(配列)と数値のリストを相互に変換 Pythonでパス文字列からファイル名・フォルダ名・拡張子を取得、結合 Pythonの正規表現モジュールreの関数match、search、sub

Last Updated: 6/26/2019, 10:34:03 PM