Pythonで文字列を扱う際、改行を入れたい場面は頻繁に出てきます。メッセージの整形、ファイルへの書き込み、コンソール出力の見やすさ向上など、改行コードの使い方はPythonプログラミングの基本的なスキルのひとつです。
Pythonには改行を表現する方法がいくつかあります。エスケープシーケンスの\n、複数行をそのまま書けるトリプルクォート、os.linesepを使った環境対応の改行など、目的に合わせた使い分けが大切です。
この記事では、Pythonで文字列に改行を入れるさまざまな方法を、サンプルコードとともにわかりやすく解説していきます。改行コードの種類や複数行文字列の書き方まで幅広くカバーしていますので、ぜひ参考にしてください。
Pythonで文字列に改行を入れるには\nを使うのが基本
それではまず、Pythonで文字列に改行を入れる最も基本的な方法について解説していきます。
Pythonで改行を表現する最もシンプルな方法がエスケープシーケンスの\n(バックスラッシュn)です。文字列の中に\nを書くと、その位置で改行が行われます。
# \nで改行を入れる基本
text = "アボカド\nドラゴンフルーツ\nサーモン"
print(text)
# 出力結果:アボカド
# 出力結果:ドラゴンフルーツ
# 出力結果:サーモン
\nは「newline(ニューライン)」の略で、文字列の中のどこにでも自由に配置できます。print()で出力すると、\nの位置で実際に改行されて表示されます。
改行コードの種類と違い
改行コードはOSによって種類が異なります。主な改行コードを整理しておきましょう。
| 改行コード | 名称 | 対応OS | エスケープ表記 |
|---|---|---|---|
| LF | ラインフィード | Linux・macOS | \n |
| CR+LF | キャリッジリターン+ラインフィード | Windows | \r\n |
| CR | キャリッジリターン | 旧macOS | \r |
# 各改行コードの確認
text_lf = "ネジ\nボルト" # Linux・macOS
text_crlf = "ネジ\r\nボルト" # Windows
text_cr = "ネジ\rボルト" # 旧macOS
print(repr(text_lf))
print(repr(text_crlf))
# 出力結果:'ネジ\nボルト'
# 出力結果:'ネジ\r\nボルト'
現代のPython開発では\nを使えばほぼ問題ありませんが、Windowsとのファイルのやり取りでは\r\nへの対応が必要になる場合があります。
print()のendパラメータで改行を制御する
print()関数はデフォルトで末尾に\nを自動追加します。このendパラメータを変更することで改行の動作を制御できます。
# print()のendパラメータで改行を制御
print("アボカド", end="") # 改行なし
print("ドラゴンフルーツ", end="")
print("サーモン") # デフォルト(\n)
print("---")
print("ゴリラ", end=" / ")
print("ロバ", end=" / ")
print("キーボード")
# 出力結果:アボカドドラゴンフルーツサーモン
# 出力結果:---
# 出力結果:ゴリラ / ロバ / キーボード
end=””にすると改行が追加されなくなります。同じ行に続けて出力したい場合や、区切り文字を自分で指定したい場合に便利なパターンです。
f文字列の中で\nを使う
f文字列と\nを組み合わせることで、変数埋め込みと改行を同時に扱えます。
# f文字列の中で\nを使う
name = "パソコン"
price = 89800
stock = 15
info = f"商品名:{name}\n価格:{price}円\n在庫:{stock}台"
print(info)
# 出力結果:商品名:パソコン
# 出力結果:価格:89800円
# 出力結果:在庫:15台
f文字列の中にそのまま\nを書けます。変数と改行を組み合わせた整形済みメッセージの生成に便利でしょう。
トリプルクォートで複数行文字列を書く方法
続いては、トリプルクォートを使った複数行文字列の書き方を確認していきます。
Pythonでは「\”\”\”」または「\’\’\’」の三重クォートで文字列を囲むことで、改行をそのまま含む複数行の文字列を直接書くことができます。\nを使わずに見た目通りに改行が入るため、長いテキストの記述に非常に向いています。
トリプルクォートの基本的な書き方
# トリプルクォートで複数行文字列
text = """ドラゴンフルーツの特徴:
・色:ピンクまたは黄色
・味:甘酸っぱい
・原産地:中南米"""
print(text)
# 出力結果:ドラゴンフルーツの特徴:
# 出力結果:・色:ピンクまたは黄色
# 出力結果:・味:甘酸っぱい
# 出力結果:・原産地:中南米
ソースコード上の改行がそのまま文字列の改行になります。\nを連続して書くよりもはるかに読みやすく、長文や定型メッセージの定義に最適です。
トリプルクォートとf文字列を組み合わせる
# トリプルクォート + f文字列
product = "キーボード"
price = 12800
color = "ブラック"
description = f"""
商品名:{product}
価格:{price}円
カラー:{color}
"""
print(description)
# 出力結果:
# 商品名:キーボード
# 価格:12800円
# カラー:ブラック
f文字列とトリプルクォートを組み合わせるには、冒頭を「f\”\”\”」と書きます。変数を埋め込みながら複数行の整形済みテキストを作れるため、メールテンプレートやレポート生成などに活躍するパターンです。
トリプルクォートの先頭改行を避ける方法
# 先頭の余分な改行を避ける書き方
# パターン1:開始クォートの直後から書く
text1 = """ゴリラは
アフリカに生息する。"""
# パターン2:strip()で先頭末尾の改行を除去
text2 = """
ロバは
草食動物です。
""".strip()
print(repr(text1))
print(repr(text2))
# 出力結果:'ゴリラは\nアフリカに生息する。'
# 出力結果:'ロバは\n草食動物です。'
トリプルクォートは開始の「\”\”\”」直後から改行なしで書くか、後ろにstrip()をつけて余分な改行を取り除くのが一般的な対処方法です。
改行を含む文字列の操作・処理方法
続いては、改行を含む文字列を操作・処理する実践的な方法を確認していきます。
改行コードが含まれる文字列の分割・置換・除去は、ファイル処理やテキスト整形でよく使われる操作です。覚えておくと実務に直結するパターンを紹介します。
splitlinesで改行ごとに分割する
# splitlines()で改行ごとに分割
text = "アボカド\nドラゴンフルーツ\nサーモン\nゴリラ"
lines = text.splitlines()
print(lines)
# \r\nにも対応
text2 = "ネジ\r\nボルト\r\nナット"
lines2 = text2.splitlines()
print(lines2)
# 出力結果:['アボカド', 'ドラゴンフルーツ', 'サーモン', 'ゴリラ']
# 出力結果:['ネジ', 'ボルト', 'ナット']
splitlines()は\n・\r\n・\rなどあらゆる改行コードに対応して分割してくれるため、split(“\n”)よりも堅牢です。ファイル読み込み後の行分割に特に向いています。
改行コードを統一・置換する方法
# 改行コードをLFに統一する
text = "パソコン\r\nキーボード\r\nマウス"
unified = text.replace("\r\n", "\n")
print(repr(unified))
# すべての改行を削除する
no_newline = text.replace("\r\n", "").replace("\n", "").replace("\r", "")
print(no_newline)
# 出力結果:'パソコン\nキーボード\nマウス'
# 出力結果:パソコンキーボードマウス
WindowsとLinuxが混在する環境でファイルを処理する場合は、最初に改行コードを\nに統一しておくと後続の処理がシンプルになります。
os.linesepで環境に対応した改行を使う
import os
# os.linesepは実行環境の改行コードを返す
items = ["ドラゴンフルーツ", "アボカド", "サーモン"]
text = os.linesep.join(items)
print(repr(text))
# Windowsでの出力結果:'ドラゴンフルーツ\r\nアボカド\r\nサーモン'
# Linux・macOSでの出力結果:'ドラゴンフルーツ\nアボカド\nサーモン'
os.linesepは実行しているOSの標準改行コードを自動で使用します。クロスプラットフォームで動作するスクリプトを書く場合に便利でしょう。
改行を使った実践的な文字列整形パターン
続いては、改行を活用した実践的な文字列整形のパターンを確認していきます。
改行の知識を活かすと、レポートの生成・ログの整形・メッセージテンプレートの作成など、実務で役立つ処理が実現できます。
リストの内容を1行ずつ整形して出力する
# リストを1行ずつ整形して表示
products = [
("ネジ", 50, 200),
("ボルト", 120, 150),
("キーボード", 8500, 30),
]
lines = []
for name, price, stock in products:
lines.append(f"商品:{name} 価格:{price}円 在庫:{stock}個")
report = "\n".join(lines)
print(report)
# 出力結果:商品:ネジ 価格:50円 在庫:200個
# 出力結果:商品:ボルト 価格:120円 在庫:150個
# 出力結果:商品:キーボード 価格:8500円 在庫:30個
joinに\nを渡すことで、リストの各要素を改行区切りで連結した文字列を生成できます。
ファイルへの書き込みで改行を使う
# ファイルへ改行を含む文字列を書き込む
data = ["アボカド", "ドラゴンフルーツ", "サーモン"]
with open("/home/claude/output.txt", "w", encoding="utf-8") as f:
for item in data:
f.write(item + "\n")
# 読み込んで確認
with open("/home/claude/output.txt", "r", encoding="utf-8") as f:
content = f.read()
print(repr(content))
# 出力結果:'アボカド\nドラゴンフルーツ\nサーモン\n'
ファイルへ書き込む際は各行の末尾に\nを明示的に追加する必要があります。writelineを使う場合も同様で、改行は自動では付与されません。
複数行の入力を受け取る方法
# 複数行の文字列を定義して処理する
multiline_input = """ゴリラ
ロバ
ドラゴンフルーツ
キーボード"""
# 各行をリストに変換して処理
items = multiline_input.splitlines()
for i, item in enumerate(items, 1):
print(f"{i}. {item}")
# 出力結果:1. ゴリラ
# 出力結果:2. ロバ
# 出力結果:3. ドラゴンフルーツ
# 出力結果:4. キーボード
splitlines()でリスト化してからenumerate()と組み合わせることで、番号付きリストの生成が簡単に実現できます。
まとめ
この記事では、Pythonで文字列に改行を入れる方法について、\nの基本からトリプルクォートによる複数行文字列、改行を含む文字列の操作まで幅広く解説しました。
改行を入れる基本は\nエスケープシーケンスで、複数行をそのまま書きたい場合はトリプルクォートが便利です。改行ごとに分割するにはsplitlines()が\r\nなど複数の改行コードに対応していて堅牢です。クロスプラットフォームで扱う場合はos.linesepも活用できます。
改行の知識はファイル処理・テキスト整形・メッセージ生成など、あらゆるPythonプログラムの場面で役立ちます。今回紹介したパターンをぜひ実際のコードに取り入れてみてください。