Python | ファイル操作など:エスケープシーケンス

Python
スポンサーリンク
  1. 概要(エスケープシーケンスは「文字列の中で特別な文字を表す」仕組み)
  2. 基本の考え方(ここが重要)
    1. 文字列リテラルの中で「\」が特別な意味を持つ
    2. よく使う代表的なもの(まずはこれだけ)
  3. raw 文字列・複数行文字列・クォートの使い分け(深掘り)
    1. raw 文字列で「エスケープを無効化」する
    2. クォートの選択で「エスケープを減らす」
    3. 複数行の文字列は「三重クォート」
  4. Unicode・コード指定のエスケープ(日本語や記号の扱い)
    1. コードで文字を指定する(\u, \U, \x, \N{name})
    2. 表示と内部の違いを確認する(repr)
  5. ファイル操作で役立つ実践(改行・区切り・パス)
    1. 改行を統一して書く(ファイルの見た目を揃える)
    2. 表の整形(タブや固定幅で読みやすく)
    3. Windows のパスは raw 文字列か「/」を使う
  6. よくある落とし穴と対策(重要ポイントの深掘り)
    1. ただの「\n」ではなく「改行文字」です
    2. バックスラッシュと円記号(¥)の混同に注意
    3. 末尾「\」は raw 文字列で書けない
    4. 正規表現では「文字列のエスケープ」と「正規表現のエスケープ」の二重管理
  7. 例題で身につける(定番から一歩先まで)
    1. 例題1:CSV を見やすくプレビュー(タブ整形)
    2. 例題2:ログをきれいに出力(改行・タブ・クォート)
    3. 例題3:Windows パスを安全に扱う(raw 文字列 or Path)
    4. 例題4:Unicode コード指定で日本語を出す
  8. まとめ

概要(エスケープシーケンスは「文字列の中で特別な文字を表す」仕組み)

エスケープシーケンスは、文字列の中に直接書きにくいもの(改行、タブ、クォート、バックスラッシュなど)を、バックスラッシュ「\」を使って表現する方法です。ファイル操作やログ整形で頻出します。まず「なぜ必要か」「何があるか」「どう避けるか(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')           # シングルクォート内で ' を出す
Python

raw 文字列・複数行文字列・クォートの使い分け(深掘り)

raw 文字列で「エスケープを無効化」する

r”…”(raw 文字列)は、ほとんどのエスケープを解釈しません。Windows のパスや正規表現では便利です。ただし末尾の「\」は書けない、クォートの直前の「\」など一部は例外がある点に注意します。

print(r"C:\data\in")   # そのまま出せる
# print(r"末尾はだめ\ ")  # 末尾の \ は不可(SyntaxError)
Python

クォートの選択で「エスケープを減らす」

文字列内に ” を多用するなら ‘…’ を使う、逆なら “…” を使うと、” や ‘ のエスケープが減ります。読みやすさを重視しましょう。

print('彼は"こんにちは"と言った')  # これならエスケープ不要
Python

複数行の文字列は「三重クォート」

“””…””” や ”’…”’ で複数行をそのまま書けます。改行も維持されるため、ヘルプテキストやテンプレートに向いています。

text = """項目一覧:
- coffee
- tea
"""
print(text)
Python

Unicode・コード指定のエスケープ(日本語や記号の扱い)

コードで文字を指定する(\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}")  # 手軽に整う
Python

Windows のパスは 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 で内部表現を確認する癖をつければ、見た目と中身のズレに強くなります。これらを身につけるだけで、文字列・ファイル周りの品質が一段上がります。

タイトルとURLをコピーしました