Python | 文字列の中で「普通に書けない文字」を扱う — エスケープシーケンス

Python
スポンサーリンク

文字列の中で「普通に書けない文字」を扱う — エスケープシーケンス入門

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))
Python

8. 解答と解説

問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. 追加練習(もっと手を動かす)

  1. s = "Hello\tWorld\nGoodbye"print() して、何文字あるか len(s) で確かめる。
  2. path = "C:\\tmp\\new.txt"path2 = r"C:\tmp\new.txt"print(repr(path))print(repr(path2)) で比較する。違いを観察する。
  3. 短い英文(3行程度)をトリプルクオートで作り、行頭に番号を付けて表示するプログラムを書いてみる。
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました