ファイルやアプリケーションのパスを指定する場合、クォート文字の前に「 r」 を付ける場面を見かけます。
この記事では、raw文字列を使用する意味と使用例を紹介します。
エスケープシーケンスって何?という方はこちらの記事を参考にしてください。
文字列を適切に扱うことができると、プログラミングの幅が広がるのでおススメです!
はじめに
基本①
Pythonは文字列を囲む場合に「 ‘ (シングルクォーテーション)」でも「” (ダブルクォーテーション)」でもどちらでもOKです。
記事内では、あえてどちらも使っています。
基本②
Windowsではパスを表す際「C:¥」となりますが、スクリプト上では「C:\」のように¥マークが \ バックスラッシュであらわされます。
ご存知ない方のために補足しておきます。
raw文字列とは
「そのまま」とか「生で」という意味です。
文字として認識(処理)したいのに、エスケープシーケンスとして認識(処理)されてしまうことを防ぐために使用します。
文字通り、「文字列をそのまま処理したい、表示したい」という場合ですね。
実行例
まずは、実用的ではない説明用の例題です。
文字列の中に「改行」を意味するエスケープシーケンス「\n」を入れてprintします。
print('これは、\nリンゴです')
実行すると、
これは、
リンゴです
となります。
このとき、クォート文字(”)の前に「r」を付けることで、エスケープシーケンスを無効にし、すべての文字を「生の文字として」認識(処理)することができます。
先ほどと同じものをraw文字列で処理してみましょう。
print(r'これは、\nリンゴです')
違いは「r」を付けただけ。実行すると、
これは、\nリンゴです
となります。
「\nって何?」となりますので、普通はこのような使い方はしませんね。
実用例
では、実用的な場面をご紹介します。
サンプルスクリプトの説明
例として、Pythonからメモ帳を起動するスクリプトを用意しました。
import subprocess
notepad = "C:\Windows\System32\notepad.exe"
subprocess.run(notepad)
Windowsの場合、メモ帳は「C:\Windows\System32」にあります。
ファイル名は「notepad.exe」です。
これを呼び出すため、上のスクリプトでは 変数notepad にパスを「C:\Windows\System32\notepad.exe」のように入れます。
これを subprocess.run で 変数notepad を引数に指定するとメモ帳が実行されます。
エラーになる場合
この場合、メモ帳のパスそのままでは「\n」がエスケープシーケンスとして認識されてしまいます。
import subprocess
notepad = "C:\Windows\System32\notepad.exe"
subprocess.run(notepad)
実行すると、下のようにエラーになります。
Traceback (most recent call last):
File "C:\Users\papa3\デスクトップ\test.py", line 5, in <module>
subprocess.run(notepad)
File "C:\Users\papa3\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 505, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Users\papa3\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\papa3\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1420, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。
長文ですが、要は「ファイルが見つからない」というエラーです。
raw文字列でエラーを回避する
その対策としてraw文字列を使います。
import subprocess
notepad = r"C:\Windows\System32\notepad.exe"
subprocess.run(notepad)
このスクリプトを実行すると、メモ帳が起動します。
このような場面では、raw文字列が必要となるのです。
raw文字列を使わない方法
上の例と同じことを、raw文字列を使わずに処理する方法がありますのでご紹介します。
通常、パスを表すときは「\」を一つしか入れませんが、ここを「\\」のように二つにします。
import subprocess
notepad = "C:\\Windows\\System32\\notepad.exe"
subprocess.run(notepad)
こうすることで、raw文字列を使わなくても、パスを表すことができるのです。
結果は同じなので、どちらでもOKです。
まとめ
今回はraw文字列を使う必要性と実例を解説しました。
覚えておく必要はないけれど、困ったときにまた見に来てください。
他にも何か質問や疑問がある場合はフォームやコメントでお知らせください。
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。
それでは、ステキなPythonライフを!