概要(エスケープシーケンスは「文字列の中で特別な文字を表す」仕組み)
エスケープシーケンスは、文字列の中に直接書きにくいもの(改行、タブ、クォート、バックスラッシュなど)を、バックスラッシュ「\」を使って表現する方法です。ファイル操作やログ整形で頻出します。まず「なぜ必要か」「何があるか」「どう避けるか(raw 文字列やクォートの使い分け)」を押さえましょう。
print("1行目\n2行目") # \n で改行
print("path=C:\\data\\in") # \\ でバックスラッシュそのもの
print("彼は\"こんにちは\"と言った") # \" でダブルクォートを中に書く
Python基本の考え方(ここが重要)
文字列リテラルの中で「\」が特別な意味を持つ
Python は、”…” や ‘…’ の中で「\n」「\t」「\」などを見つけると、特別な“制御文字”として解釈します。これにより、改行・タブ・バックスラッシュなどを安全に書けます。もし「そのままの文字」を出したい場合は、対応するエスケープ(例:\ でバックスラッシュ自体)にします。
print("A\tB") # タブで列を揃える
print("A\\tB") # 文字通り「\t」を出す
Pythonよく使う代表的なもの(まずはこれだけ)
- 改行: \n
- タブ: \t
- バックスラッシュ: \
- ダブルクォート: “
- シングルクォート: ‘
- キャリッジリターン: \r(行頭復帰)
- ベル: \a(端末ベル。環境によっては鳴らない)
print("列1\t列2\n---\t---")
print("C:\\Windows\\System32")
print('It\'s OK') # シングルクォート内で ' を出す
Pythonraw 文字列・複数行文字列・クォートの使い分け(深掘り)
raw 文字列で「エスケープを無効化」する
r”…”(raw 文字列)は、ほとんどのエスケープを解釈しません。Windows のパスや正規表現では便利です。ただし末尾の「\」は書けない、クォートの直前の「\」など一部は例外がある点に注意します。
print(r"C:\data\in") # そのまま出せる
# print(r"末尾はだめ\ ") # 末尾の \ は不可(SyntaxError)
Pythonクォートの選択で「エスケープを減らす」
文字列内に ” を多用するなら ‘…’ を使う、逆なら “…” を使うと、” や ‘ のエスケープが減ります。読みやすさを重視しましょう。
print('彼は"こんにちは"と言った') # これならエスケープ不要
Python複数行の文字列は「三重クォート」
“””…””” や ”’…”’ で複数行をそのまま書けます。改行も維持されるため、ヘルプテキストやテンプレートに向いています。
text = """項目一覧:
- coffee
- tea
"""
print(text)
PythonUnicode・コード指定のエスケープ(日本語や記号の扱い)
コードで文字を指定する(\u, \U, \x, \N{name})
- \uXXXX: 16進4桁の Unicode(例:\u3042 は「あ」)
- \UXXXXXXXX: 16進8桁の Unicode(絵文字など拡張面に)
- \xXX: 1バイト値(主にバイナリ寄り)
- \N{NAME}: 文字名で指定(読みやすいが名前の正確さが必要)
print("\u3053\u3093\u306b\u3061\u306f") # こんにちは
print("\N{HIRAGANA LETTER A}") # あ
Python表示と内部の違いを確認する(repr)
repr は「文字列の内部表現(エスケープ含む)」を見せてくれます。デバッグに便利です。
s = "A\nB"
print(s) # 実際に改行される
print(repr(s)) # 'A\nB'(中身の可視化)
Pythonファイル操作で役立つ実践(改行・区切り・パス)
改行を統一して書く(ファイルの見た目を揃える)
OS によって改行コードの違いがあるため、newline=”\n” を指定して “\n” 統一で書くと再現性が上がります。
with open("log.txt", "w", encoding="utf-8", newline="\n") as f:
f.write("started\nfinished\n")
Python表の整形(タブや固定幅で読みやすく)
タブ \t は簡便ですが、見出しの長さでズレることがあります。固定幅+スペースで整形する方が安定します。
rows = [("coffee", 2), ("tea", 1)]
for name, qty in rows:
print(f"{name:<10}\t{qty}") # 手軽に整う
PythonWindows のパスは raw 文字列か「/」を使う
バックスラッシュの連発は可読性を落とします。raw 文字列を使うか、Path を使って「/」で結合すると安全です。
from pathlib import Path
p = Path(r"C:\data") / "in" / "sample.txt"
print(p) # C:\data\in\sample.txt
Pythonよくある落とし穴と対策(重要ポイントの深掘り)
ただの「\n」ではなく「改行文字」です
“\n” は画面で改行しますが、repr で見ると「\n」という1文字の制御コードです。文字数・幅の計算で意識しておくとズレを防げます。
s = "A\nB"
print(len(s)) # 3(A, 改行, B)
Pythonバックスラッシュと円記号(¥)の混同に注意
Windows の一部環境ではバックスラッシュが見た目「¥」になり、混乱しがちです。コード上は「\」であり、エスケープの対象です。raw 文字列や Path を使うと安全です。
末尾「\」は raw 文字列で書けない
r”末尾” は不正です。末尾の「\」を扱いたい場合は普通の文字列で “\”, あるいは結合などで回避します。
print("末尾\\" + "") # 末尾の \ を表すならこうする
Python正規表現では「文字列のエスケープ」と「正規表現のエスケープ」の二重管理
パターンを r”…” にすることで、Python の文字列エスケープを無効化し、正規表現の「\d」「\s」などだけを意識できます。
import re
print(bool(re.match(r"\d{3}-\d{4}", "123-4567")))
Python例題で身につける(定番から一歩先まで)
例題1:CSV を見やすくプレビュー(タブ整形)
rows = [["name", "qty"], ["coffee", 2], ["tea", 1]]
for r in rows:
print(f"{r[0]:<10}\t{r[1]}")
Python例題2:ログをきれいに出力(改行・タブ・クォート)
from datetime import datetime
def log(level: str, msg: str) -> None:
ts = datetime.now().isoformat(timespec="seconds")
print(f"[{ts}] {level:<5}\t{msg.replace('\n', r'\n')}")
log("INFO", "started")
log("WARN", "line1\nline2") # 改行を可視化して出す
Python例題3:Windows パスを安全に扱う(raw 文字列 or Path)
from pathlib import Path
win_path = r"C:\work\project\logs\app.log" # raw文字列
p = Path(win_path)
with p.open("a", encoding="utf-8", newline="\n") as f:
f.write("started\n")
Python例題4:Unicode コード指定で日本語を出す
title = "\u30b3\u30fc\u30d2\u30fc" # コーヒー
print(f"商品名: {title}")
Pythonまとめ
エスケープシーケンスは「文字列の中で特別な文字を安全に表現」するための基本です。まず \n(改行)、\t(タブ)、\(バックスラッシュ)、”/’(クォート)を確実に使えるようにし、必要に応じて \u / \U / \x / \N でコード指定も理解する。パスや正規表現では raw 文字列が強力ですが、末尾「\」の制約に注意。ファイル書き込みでは newline=”\n” で改行統一、ログや表整形ではタブや固定幅で見やすく。repr で内部表現を確認する癖をつければ、見た目と中身のズレに強くなります。これらを身につけるだけで、文字列・ファイル周りの品質が一段上がります。
