Pythonの文字列エスケープとraw文字列
Pythonの文字列エスケープを学びます。raw文字列(r文字列)、バイト文字列、f文字列のエスケープ、トリプルクォート文字列、Unicodeエスケープシーケンスを含むPython 3の文字列処理ベストプラクティスを解説します。
詳細な説明
Pythonの文字列エスケープ
Pythonは豊富な文字列タイプを提供し、それぞれ異なるエスケープ動作を持ちます。これらのオプションを理解することで、あらゆる状況に最適なアプローチを選択できます。
標準エスケープシーケンス
Pythonは通常の文字列で以下のエスケープシーケンスを認識します:
\\' → シングルクォート
\\" → ダブルクォート
\\\\ → バックスラッシュ
\\n → 改行
\\r → キャリッジリターン
\\t → タブ
\\b → バックスペース
\\f → フォームフィード
\\a → ベル/アラート
\\0 → null文字
\\ooo → 8進文字(最大3桁)
\\xhh → 16進文字(ちょうど2桁)
\\uxxxx → Unicode BMP(ちょうど16進4桁)
\\Uxxxxxxxx → Unicodeフルレンジ(ちょうど16進8桁)
\\N{name} → Unicode文字名による指定
raw文字列
文字列に r をプレフィックスすると、エスケープシーケンスの処理が無効になります:
path = r"C:\Users\name\Documents" # バックスラッシュはリテラル
regex = r"\d+\.\d+" # ダブルエスケープ不要
raw文字列は奇数個のバックスラッシュで終わることができません — r"path\" は構文エラーです。
トリプルクォート文字列
トリプルクォート(""" または ''')は \n なしで複数行のコンテンツを記述できます。トリプルクォート文字列内でもエスケープは機能しますが、改行のエスケープは不要です。
f文字列のエスケープ
f文字列では波括弧が補間デリミタです。リテラルの波括弧を含めるには二重にします:
f"{{not interpolated}}" # 出力: {not interpolated}
f"Value: {x}" # 出力: Value: 42
bytesとstrの違い
Python 3は str(Unicode)と bytes を区別します。バイト文字列(b"...")はASCII文字と \xHH エスケープのみを受け入れ、\u や \N{} は使用できません。
デバッグ用のrepr()
repr() はすべての特殊文字がエスケープされた文字列を返し、デバッグに非常に有用です。
ユースケース
Pythonの文字列エスケープは、ファイルパス処理コードの記述、パラメータバインディングによるSQLクエリの構築、正規表現パターンの作成、ETLパイプラインでのテキストデータ処理、設定ファイルの生成、特殊文字を含むテストアサーションの記述、WindowsとUnixパスを処理するクロスプラットフォームスクリプトの作成に必要です。