Pythonで文字列を使っていて、こんなコードを見たことはありませんか?
print("こんにちは\nPython")
この \n
のような記号は エスケープシーケンス と呼ばれるものです。
エスケープシーケンスとは
- バックスラッシュ(\)で始まる特殊な文字の組み合わせ
- 普通には入力できない文字(改行、タブなど)を表現する方法
- 文字列の中で特別な意味を持つ記号
この記事では、Pythonで使えるエスケープシーケンスを初心者にも分かりやすく説明します。
エスケープシーケンスの基本

なぜエスケープシーケンスが必要?
普通の文字列では表現が難しい場面があります:
問題1:改行を入れたい
# これはエラーになる
text = "1行目
2行目" # 文字列の途中で改行はできない
解決方法:\n を使う
text = "1行目\n2行目"
print(text)
1行目
2行目
問題2:引用符を文字列の中で使いたい
# これはエラーになる
message = "彼は"こんにちは"と言った" # 引用符が混乱する
解決方法:” を使う
message = "彼は\"こんにちは\"と言った"
print(message)
彼は"こんにちは"と言った
エスケープシーケンスの書き方
基本形
\文字
重要なポイント
- 必ず「バックスラッシュ」から始める
- スラッシュ(/)ではない
- 大文字と小文字を区別する
よく使うエスケープシーケンス一覧
基本的なもの
エスケープ | 意味 | 説明 |
---|---|---|
\n | 改行 | 新しい行に移る |
\t | タブ | 空白を一定間隔で入れる |
\\ | バックスラッシュ | \ マーク自体を表示 |
\' | シングルクォート | ‘ を文字として表示 |
\" | ダブルクォート | ” を文字として表示 |
使用例
改行(\n)
print("おはよう\nこんにちは\nこんばんは")
おはよう
こんにちは
こんばんは
タブ(\t)
print("名前\t年齢\t職業")
print("田中\t25\t会社員")
print("佐藤\t30\t教師")
名前 年齢 職業
田中 25 会社員
佐藤 30 教師
バックスラッシュ(\)
print("ファイルパス: C:\\Users\\Python")
ファイルパス: C:\Users\Python
引用符(’と”)
print('I\'m happy!')
print("彼は\"ありがとう\"と言った")
I'm happy!
彼は"ありがとう"と言った
その他のエスケープシーケンス
制御文字
エスケープ | 意味 | 説明 |
---|---|---|
\r | キャリッジリターン | 行の先頭に戻る |
\b | バックスペース | 1文字戻る |
\f | フォームフィード | 改ページ |
\v | 垂直タブ | 垂直方向のタブ |
使用例
# \r の例(行の先頭に戻る)
print("Hello\rWorld") # "World"が"Hello"を上書き
World
# \b の例(バックスペース)
print("ABC\bD") # "C"が削除されて"ABD"
ABD
文字コードによる指定
エスケープ | 意味 | 例 |
---|---|---|
\ooo | 8進数文字 | \141 → ‘a’ |
\xhh | 16進数文字 | \x61 → ‘a’ |
\N{name} | Unicode名 | \N{SMILE} → ☺ |
\uxxxx | Unicode(4桁) | \u3042 → あ |
\Uxxxxxxxx | Unicode(8桁) | \U0001F600 → 😀 |
使用例
# 8進数
print("\141\142\143") # abc
# 16進数
print("\x61\x62\x63") # abc
# Unicode
print("\u3042\u3044\u3046") # あいう
print("\U0001F600") # 😀
実践的な使用例

例1:きれいな表を作る
def print_menu():
print("=" * 30)
print("メニュー")
print("=" * 30)
print("1.\t新規作成")
print("2.\tファイルを開く")
print("3.\t保存")
print("4.\t終了")
print("=" * 30)
print_menu()
==============================
メニュー
==============================
1. 新規作成
2. ファイルを開く
3. 保存
4. 終了
==============================
例2:CSVデータの表示
def print_csv_data():
# ヘッダー
print("名前\t年齢\t都市")
print("-" * 20)
# データ
data = [
("田中太郎", 25, "東京"),
("佐藤花子", 30, "大阪"),
("鈴木一郎", 35, "名古屋")
]
for name, age, city in data:
print(f"{name}\t{age}\t{city}")
print_csv_data()
名前 年齢 都市
--------------------
田中太郎 25 東京
佐藤花子 30 大阪
鈴木一郎 35 名古屋
例3:進行状況の表示
import time
def show_progress():
for i in range(6):
print(f"\r進行状況: {'■' * i}{'□' * (5-i)} {i*20}%", end="")
time.sleep(0.5)
print("\n完了!")
show_progress()
例4:ログファイルの作成
import datetime
def write_log(message):
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}]\t{message}\n"
with open("log.txt", "a", encoding="utf-8") as file:
file.write(log_entry)
print(f"ログに記録: {message}")
# 使用例
write_log("アプリケーション開始")
write_log("ユーザーがログイン")
write_log("ファイルを保存")
raw文字列 – エスケープを無効にする方法
raw文字列とは?
エスケープシーケンスを無効にして、バックスラッシュをそのまま文字として扱う方法です。
通常の文字列
path = "C:\Users\name\Documents" # \n や \D が問題になる可能性
print(path)
raw文字列
path = r"C:\Users\name\Documents" # rを前に付ける
print(path)
C:\Users\name\Documents
raw文字列の使用場面
1. ファイルパス
# Windows のファイルパス
file_path = r"C:\Program Files\Python\python.exe"
print(file_path)
# 相対パス
relative_path = r".\data\input.txt"
print(relative_path)
2. 正規表現
import re
# 通常の文字列(エスケープが二重になって読みにくい)
pattern1 = "\\d+\\.\\d+"
# raw文字列(読みやすい)
pattern2 = r"\d+\.\d+"
text = "価格は123.45円です"
result = re.findall(pattern2, text)
print(result) # ['123.45']
3. SQL文
# 複雑なSQL文
sql = r"""
SELECT name, age
FROM users
WHERE age > 20
AND name LIKE '%田中%'
"""
print(sql)
raw文字列の注意点
末尾にバックスラッシュは置けない
# これはエラー
# path = r"C:\Users\"
# 解決方法1:通常の文字列と結合
path = r"C:\Users" + "\\"
# 解決方法2:os.path.join を使う
import os
path = os.path.join(r"C:\Users", "")
よくある間違いと解決方法

間違い1:スラッシュとバックスラッシュの混同
# 間違い
print("改行/n") # /n は効果なし
# 正しい
print("改行\n") # \n が改行になる
間違い2:エスケープシーケンスの大文字小文字
# 間違い
print("タブ\T") # \T は無効
# 正しい
print("タブ\t") # \t が正しい
間違い3:不正なエスケープシーケンス
# 間違い(警告が出る)
text = "\d" # \d は正規表現では意味があるが、文字列では無効
# 正しい方法1:raw文字列を使う
text = r"\d"
# 正しい方法2:バックスラッシュをエスケープ
text = "\\d"
間違い4:引用符の混在
# 間違い
text = 'I'm happy' # 引用符が競合
# 正しい方法1:エスケープを使う
text = 'I\'m happy'
# 正しい方法2:異なる引用符を使う
text = "I'm happy"
# 正しい方法3:三重引用符を使う
text = '''I'm happy'''
応用例とベストプラクティス
多言語対応
def create_multilingual_message():
messages = {
'ja': 'こんにちは\nPythonの世界へようこそ',
'en': 'Hello\nWelcome to Python world',
'fr': 'Bonjour\nBienvenue dans le monde Python'
}
for lang, message in messages.items():
print(f"[{lang.upper()}]")
print(message)
print("-" * 20)
create_multilingual_message()
設定ファイルの作成
def create_config_file():
config_content = '''[database]
host = localhost
port = 5432
name = myapp
[logging]
level = INFO
file = app.log
format = %(asctime)s\t%(levelname)s\t%(message)s
'''
with open('config.ini', 'w', encoding='utf-8') as file:
file.write(config_content)
print("設定ファイルを作成しました")
create_config_file()
コマンドラインツール
def print_help():
help_text = r"""
使用方法: python script.py [オプション] ファイル名
オプション:
-h, --help このヘルプを表示
-v, --verbose 詳細な出力
-o, --output 出力ファイル名を指定
例:
python script.py input.txt
python script.py -v -o output.txt input.txt
python script.py --help
"""
print(help_text)
print_help()
トラブルシューティング
文字化けの対処
# 日本語を含む文字列の正しい扱い
def safe_print(text):
try:
print(text)
except UnicodeEncodeError:
# エンコードエラーの場合、安全な文字のみ表示
safe_text = text.encode('ascii', errors='replace').decode('ascii')
print(f"警告: 一部の文字を表示できません: {safe_text}")
# 使用例
safe_print("日本語テスト\n改行テスト")
デバッグ用の文字列表示
def debug_string(text):
"""文字列の中身を詳しく表示する関数"""
print(f"元の文字列: {repr(text)}")
print(f"表示結果:")
print(text)
print(f"文字数: {len(text)}")
print("-" * 30)
# 使用例
debug_string("Hello\nWorld\t!")
debug_string(r"Hello\nWorld\t!")
まとめ
Pythonのエスケープシーケンスは、文字列を自在に操るための重要なテクニックです。
重要なポイント
- 基本の3つ:
\n
(改行)、\t
(タブ)、\\
(バックスラッシュ) - 引用符:
\'
(シングル)、\"
(ダブル) - raw文字列:
r""
でエスケープを無効化 - Unicode対応:
\u
や\U
で特殊文字も表現可能
よく使うエスケープシーケンス一覧
# 基本
"\n" # 改行
"\t" # タブ
"\\" # バックスラッシュ
"\'" # シングルクォート
"\"" # ダブルクォート
# 制御文字
"\r" # キャリッジリターン
"\b" # バックスペース
# 文字コード
"\x41" # 16進数(A)
"\u3042" # Unicode(あ)
使い分けのコツ
- テキスト整形:
\n
と\t
を活用 - ファイルパス: raw文字列
r""
を使用 - 正規表現: raw文字列で読みやすく
- 多言語対応: Unicodeエスケープを活用
コメント