Pythonでプログラムを書いていると、文字列の中に改行を入れたい場面や、print関数の改行を制御したい場面が頻繁に発生します。改行の方法はいくつかあり、場面によって最適な方法が異なるため、それぞれの使い分けを正しく理解しておく必要があります。
この記事では、Pythonで改行を扱う方法を以下2つのテーマに分けて、サンプルコード付きで解説していきます。
- 文字列に改行を挿入する方法
- print関数で改行を制御する方法
Pythonの文字列に改行を挿入する方法
エスケープシーケンス\nで改行する
エスケープシーケンス\nは、Pythonで文字列に改行を挿入する最も基本的な方法です。\nはLF(Line Feed)と呼ばれる改行コードを表す1文字のエスケープシーケンスです。ソースコード上はバックスラッシュと n の2文字で書きますが、Pythonが解釈すると改行を表す1文字として扱われます(len("\n")は1になります)。文字列中のこの位置で、出力時に改行が行われます。
message = "Hello\nWorld\nPython"
print(message)
上記のコードを実行すると、\nの位置でそれぞれ改行され、「Hello」「World」「Python」が3行に分かれて表示されます。1つの文字列の中に複数の\nを挿入することによって、任意の位置で改行を入れることができます。
header = "名前\t年齢\t職業"
row1 = "田中\t30\tエンジニア"
row2 = "佐藤\t25\tデザイナー"
table = header + "\n" + row1 + "\n" + row2
print(table)
このサンプルコードでは、タブ文字\tと改行文字\nを組み合わせて、簡易的な表形式の出力を作成しています。エスケープシーケンスは\n以外にも\t(タブ)や\\(バックスラッシュそのもの)など複数の種類があり、文字列の整形に幅広く活用できます。
三重引用符(トリプルクォート)で複数行の文字列を作る
三重引用符("""または''')を使うと、文字列の中にそのまま改行を含めることができます。コード上で改行した位置がそのまま文字列内の改行として反映されるため、\nを手動で挿入する必要がなく、複数行のテキストを直感的に記述できます。
message = """1行目のテキスト
2行目のテキスト
3行目のテキスト"""
print(message)
上記のコードでは、三重引用符の中に記述した改行がそのまま文字列に含まれ、3行に分かれて出力されます。HTMLテンプレートやSQL文など、複数行にわたるテキストを扱う場面で特に便利です。
html = """\
<html>
<head>
<title>サンプル</title>
</head>
<body>
<p>Hello, World!</p>
</body>
</html>"""
print(html)
三重引用符を使う際は、開始引用符の直後に改行を入れると、文字列の先頭に意図しない空行が含まれる点に注意してください。上記のサンプルコードのように、開始引用符の直後に\(行継続)を置くと、コードの見た目のインデントを整えつつ、文字列先頭の空行を防ぐことができます。
\を使わずに開始引用符の直後からテキストを書く方法でも空行は防げますが、ソースコードの見た目が崩れるため、複数行テンプレートを書くときは"""\の書き方が実務でよく使われます。
なお、三重引用符の中の行頭インデントもそのまま文字列に含まれる点にも注意してください。不要な空白が混入しないようにインデント位置を意識するか、textwrap.dedentなどで整形してください。
文字列の連結で改行を挿入する
文字列の連結演算子+を使って、改行文字\nを含む文字列を結合する方法です。変数に格納された複数の文字列を改行で区切りたい場合や、条件に応じて出力内容を組み立てたい場合に適しています。
line1 = "エラーが発生しました"
line2 = "ファイルが見つかりません"
line3 = "パスを確認してください"
error_message = line1 + "\n" + line2 + "\n" + line3
print(error_message)
上記のコードでは、3つの変数に格納されたメッセージを\nで結合し、3行のエラーメッセージとして出力しています。ただし、結合する文字列の数が多くなると、+演算子の繰り返しでコードが冗長になるため、その場合はjoinメソッドの使用を検討してください。
lines = ["1行目", "2行目", "3行目", "4行目"]
result = "\n".join(lines)
print(result)
joinメソッドは、リストの各要素を指定した区切り文字で結合する文字列メソッドです。上記のコードでは"\n"を区切り文字として4つの文字列を結合しているため、各要素の間に改行が挿入されて4行で出力されます。+演算子は要素数が固定の場合に適しており、joinは要素数が変動する場合でもコードを変更せずに対応できる点が大きな違いです。
print関数で改行を制御する方法
Pythonのprint関数は、end引数のデフォルト値が"\n"に設定されているため、出力の末尾に自動的に改行を追加します。また、複数の引数を渡した場合は、各引数の間にデフォルトで半角スペースが挿入されます。これらの動作はend引数とsep引数で変更できます。
print(*objects, sep=' ', end='\n', file=None, flush=False)
出典:Python公式ドキュメント - Built-in Functions: print()
ここでは、print関数の改行を制御する方法を2つ紹介します。
- end引数で改行なしに出力する
- sep引数で区切り文字を改行にする
それぞれの引数を使い分けることによって、出力のフォーマットを柔軟に制御できます。
それでは各項目について、詳しく解説していきます。
end引数で改行なしに出力する
print関数のend引数に空文字列""を指定すると、出力の末尾に改行が付加されなくなります。プログレスバーの表示や、横並びのデータ出力など、1行に連続して文字を出力したい場面で活用できます。
for i in range(5):
print(i, end=" ")
print()
上記のコードでは、0から4までの数値が半角スペース区切りで1行に「0 1 2 3 4 」と出力されます。ループの後に引数なしのprint()を呼び出しているのは、最後に改行を入れて次の出力との区切りを作るためです。
items = ["Python", "Java", "Go", "Rust"]
print(", ".join(items))
end引数にはカンマ区切り", "やタブ文字"\t"など、任意の文字列を指定できます。ただし、ループで各要素の間にだけ区切り文字を入れたい場合は、末尾に余分な区切り文字が残ってしまう問題が発生します。
上記のサンプルコードのように、区切り文字を挟んで要素を並べたいときは、joinメソッドで結合してからprintする方がシンプルで確実です。end引数は「1つのprint呼び出しの末尾をどうするか」を制御する用途に使い、「要素間の区切り」にはjoinやsep引数を使うのが実務上のセオリーです。
sep引数で区切り文字を改行にする
print関数のsep引数を使うと、複数の引数間に挿入される区切り文字を変更できます。デフォルトの半角スペースの代わりに改行文字\nを指定することによって、各引数を別々の行に出力できます。
print("名前: 田中", "年齢: 30", "職業: エンジニア", sep="\n")
上記のコードでは、3つの引数がそれぞれ改行で区切られ、3行に分かれて出力されます。\nを文字列の中に埋め込む方法と比べて、各項目が独立した引数として記述されるため、コードの可読性が高くなります。
fruits = ["りんご", "みかん", "バナナ", "ぶどう"]
print(*fruits, sep="\n")
リストの先頭に*(アンパック演算子)を付けると、リストの各要素がprint関数の個別の引数として展開されます。上記のコードでは、4つの果物名がそれぞれ改行で区切られて4行で出力されます。リストの要素を1行ずつ表示したい場合に、forループを書かずに簡潔に記述できる方法です。
Pythonの改行に関するよくある質問
Pythonで\nと書いても改行されないのはなぜですか?
文字列の前にrを付けてraw文字列(生の文字列)にしている場合、\nはエスケープシーケンスとして解釈されず、バックスラッシュと文字nの2文字としてそのまま扱われます。raw文字列とは、バックスラッシュを通常のエスケープ処理せずに文字そのものとして扱う文字列の記法で、正規表現やWindowsのファイルパスを記述する際によく使われます。
# raw文字列では \n が改行にならない
raw = r"Hello\nWorld"
print(raw)
# 通常の文字列では \n が改行になる
normal = "Hello\nWorld"
print(normal)
上記のコードでは、raw文字列の方は「Hello\nWorld」とそのまま表示され、通常の文字列の方は「Hello」と「World」が改行されて2行で表示されます。意図した改行が行われない場合は、文字列の先頭にrが付いていないか確認してください。
なお、raw文字列はバックスラッシュで終わることができません(r"path\"はSyntaxErrorになります)。Windowsパスをraw文字列で書く場合は末尾に注意し、末尾のバックスラッシュだけは通常の文字列として書き足すなどの工夫が必要です。
Pythonで文字列から改行を削除するにはどうすればよいですか?
stripメソッドまたはreplaceメソッドを使います。stripは文字列の先頭と末尾にある空白文字(改行・スペース・タブなど)をまとめて削除するメソッドで、末尾の改行だけを除去したい場合はrstrip("\n")を使います。文字列の途中にある改行も含めて全て削除したい場合は、replaceメソッドが適しています。
# 末尾の改行を削除
line = "Hello, World!\n"
print(line.rstrip("\n"))
# 全ての改行を削除
text = "1行目\n2行目\n3行目"
print(text.replace("\n", ""))
# 改行をスペースに置換
print(text.replace("\n", " "))
ファイルを1行ずつ読み込むループでは、各行の末尾に改行文字が含まれるため、rstrip("\n")で除去してから処理するのが一般的なパターンです。引数なしのrstrip()を使うと、改行だけではなくスペースやタブも一緒に削除される点に注意してください。
print関数で改行を2つ入れるにはどうすればよいですか?
print関数のend引数に\n\nを指定するか、文字列内に\nを2つ連続で記述することによって、出力に空行を挿入できます。空行とは、テキスト上で何も表示されない行のことで、段落間の視覚的な区切りとして使用されます。
# 方法1: end引数で改行を2つにする
print("段落1", end="\n\n")
print("段落2")
# 方法2: 文字列内に \n を2つ入れる
print("段落A\n\n段落B")
# 方法3: 空のprint()を間に入れる
print("段落X")
print()
print("段落Y")
上記の3つの方法はいずれも同じ結果を得られますが、コードの文脈に応じて使い分けてください。段落の区切りが固定的な場合は方法1か方法2が適しており、条件に応じて空行を入れるかどうかを制御したい場合は方法3が柔軟に対応できます。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PythonをWebで実行する方法
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
サイボウズがkintone AIを正式提供、β版から約1年を経てクレジット制を導入
ロゼッタのラクヤクAIがCSRドラフト作成期間を90%以上短縮、従来4週間を約2日に
AI CROSSが不動産業界向け生成AI伴走支援を開始、アスコットの業務AI実装を実践サポート
日本情報クリエイトが「オーナー提案AIロボⅡ」売買査定を刷新、月1万円からW査定が回数無制限に
Wur株式会社がAI新規事業診断サービス「MVP事業診断レポート」をリリース、12の質問で事業構想を約10分で分析
バトンズがM&A専門家向け「AI概要書」β版を提供開始、企業概要書のドラフトを最速3分で自動生成
SCSKが観光DXサービス「Connexia」を開発、首里城公園でNFT活用の周遊促進が始動
Verdent AI発表、エンジニア不要でソフトウェアを構築する「AIエンジニアリングチーム」が登場
ゼネラルBREXAテクノロジーが外食・小売向けAIサービス「aimana」を開発、店長の意思決定をデータで支援
田中組がKencopa工程AIエージェント製品版を先行利用開始、建設現場の工程管理属人化を解消へ
