文字列の中で「普通に書けない文字」を扱う — エスケープシーケンス入門
1. エスケープシーケンスとは?
エスケープシーケンスは、バックスラッシュ \ と文字の組み合わせで表す特別な「文字」や「動作」です。
- 普通は直接書けないもの(改行、タブ、クオートそのもの)を文字列に含めたり、制御したりするために使います。
- 書式:
\<記号>(例:\n)
2. よく使うエスケープ一覧(重要度順)
\n— 改行(new line)\t— タブ(横に空白を入れる)\\— バックスラッシュ\自体を表す\'— シングルクオート(')を文字として使う\"— ダブルクオート(")を文字として使う\r— キャリッジリターン(古いOSや特殊用途)\b— バックスペース(表示で消す)※コンソールでの挙動は環境依存\xhh— 16進で文字コードを指定(例:\x41='A')\uXXXX/\UXXXXXXXX— Unicode 指定(例:\u3042='あ')
※ すべて覚さなくて大丈夫。まずは \n, \t, \\, \', \" を押さえれば十分です。
3. 基本的な使い方(例と出力)
改行 \n
print("こんにちは。\n元気ですか?\nまたね。")
Python出力:
こんにちは。
元気ですか?
またね。
タブ \t
print("名前\t年齢\t職業")
print("Alice\t30\tEngineer")
Python出力(列が揃って見える):
名前 年齢 職業
Alice 30 Engineer
引用符を文字として入れる(\' / \")
print('Tom\'s dog is cute.')
print("She said, \"Hello!\"")
Python出力:
Tom's dog is cute.
She said, "Hello!"
バックスラッシュ \
Windows のパスを書くときに便利:
print("C:\\Users\\Halu\\Documents\\file.txt")
Python出力:
C:\Users\Halu\Documents\file.txt
4. 長い文字列を複数行でコードに書く方法
(A) 行継続 \ を使う(コード上で行をつなげる)
s = "これはとても長い文章で、コード上で読みやすくするために\
行を分けて書いていますが、実行時は1行の文字列です。"
print(s)
Python注意:行末にある \ の後には改行そのものが含まれない(続けているだけ)。
(B) 三重引用符(トリプルクオート)で複数行の文字列をそのまま書く
s = """これは複数行の
文章です。
改行がそのまま文字列になります。"""
print(s)
Python出力:
これは複数行の
文章です。
改行がそのまま文字列になります。
トリプルクオートは、メールや長文(説明文)を書くときに便利です。
5. 生文字列(raw string)とその使いどころ
r"..." または r'...' を前に付けると、Python はエスケープシーケンスを無効にして そのままの文字列 として扱います。主にパスや正規表現(regex)で使います。
path = r"C:\Users\Halu\new_folder\test.txt"
print(path) # バックスラッシュがそのまま表示される
Python普通の文字列だと \n が改行になりますが、raw 文字列だと \n は \ と n の2文字のままです。
注意:raw 文字列の最後に \ を単独で置けない制約があります(文字列リテラルの仕様上)。
6. 実践的なコツ・ベストプラクティス
- 文字列に
'と"のどちらか片方しか使わないなら、外側に別の方を使うことでエスケープを避けられます。
例:"I'm fine."(シングルクオートをエスケープしない) - 長い説明文や複数行の文章は トリプルクオート を使うと楽。
- Windows パスや regex は raw 文字列(
r"...")が便利。 - デバッグで エスケープされた状態を確認したいときは
repr()を使う:s = "Hello\nWorld" print(s) # 改行で表示 print(repr(s)) # 'Hello\nWorld' とエスケープ表現が見える - f文字列(
f"...")や.format()と組み合わせてもエスケープは同じように使えます。
7. 例題
以下を自分で実行して答えを確認してみてください(解答は下にあります)。
問題 1
次のコードの出力は何になりますか?
print("Line1\nLine2\tTabbed\nBackslash:\\\\")
Python問題 2
文字列リテラル内でシングルクオートを含めたいとき、どの書き方が一番読みやすいでしょうか?(2通り示してください)
問題 3
次の文字列を「画面に次のように2行で表示する」にはどう書けば良いですか?
表示したい内容:
Hello, world!
This is Python.
Python問題 4(実務寄り)
Windows のファイルパス C:\new_folder\data.txt を文字列にして print() したい。エスケープなしでそのまま書く方法は?
問題 5(チャレンジ)
次のコードの len() の結果はいくつになるでしょう?
s = "a\nb\\c"
print(s)
print(len(s))
Python8. 解答と解説
問1 解答
出力:
Line1
Line2 Tabbed
Backslash:\\
詳解:
\nは改行、\tはタブ、\\\\は\\を表します(\\が1つのバックスラッシュなので、\\\\は2つのバックスラッシュ)。
問2 解答(例)
- 方法 A(ダブルクオートで囲む):
"I'm fine." - 方法 B(シングルクオートで囲ってエスケープ):
'I\'m fine.'
どちらでもOK。A のほうが見た目がすっきりする。
問3 解答
複数方法あります。
- エスケープを使う:
print("Hello, world!\nThis is Python.")
Python- トリプルクオートを使う:
print("""Hello, world!
This is Python.""")
Python問4 解答
raw 文字列を使う:
print(r"C:\new_folder\data.txt")
Python(ただし最後が \ 単独で終わる場合は raw 文字列は使えない制約あり)
問5 解答
まず s = "a\nb\\c" を展開すると:
- 文字列の中身(表示)は:
a
b\c
- 実際の文字数(
len)は4です。内訳:'a' (1),'\n' (1),'b' (1),'\' (1),'c' (1)→ 合計 5? ここで要注意:\\は文字列リテラル内で\\と書いてありますが、それは実際の文字列に 1つのバックスラッシュ を生みます。計算し直すと:'a'→ 1\n→ 1'b'→ 1\\→ 1(実際の文字列では\が1文字)'c'→ 1
合計 = 5
(したがってlen(s)は 5 になります。)
9. よくあるハマりどころ(トラブルシュート)
"\n"をそのまま見せたいとき(改行にしたくない)→r"\n"か"\n".replace("\n", "\\n")、あるいはrepr()を使う。- Windows パスで
\t(タブ)になる →r"..."を使うか\\を使う。 - raw 文字列でも最後が
\単独だと文法エラーになる → 末尾に\\を使うか普通の文字列で扱う。 - 正規表現で
\dなどを使うならr"\d+"のように raw を使うと読みやすい。
10. 追加練習(もっと手を動かす)
s = "Hello\tWorld\nGoodbye"をprint()して、何文字あるかlen(s)で確かめる。path = "C:\\tmp\\new.txt"とpath2 = r"C:\tmp\new.txt"をprint(repr(path))とprint(repr(path2))で比較する。違いを観察する。- 短い英文(3行程度)をトリプルクオートで作り、行頭に番号を付けて表示するプログラムを書いてみる。
