かゆい所に手が届く解説

【raw文字列】Pythonで文字列の前に「r」を付ける意味

ファイルやアプリケーションのパスを指定する場合、クォート文字の前に「 r」 を付ける場面を見かけます。

この記事では、raw文字列を使用する意味と使用例を紹介します。

エスケープシーケンスって何?という方はこちらの記事を参考にしてください。

文字列を適切に扱うことができると、プログラミングの幅が広がるのでおススメです!

「rって何?」という人は、ぜひ最後までご覧ください。

はじめに

基本①

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文字列を使います。

raw文字列によってエラーを回避する方法
import subprocess

notepad = r"C:\Windows\System32\notepad.exe"

subprocess.run(notepad)

このスクリプトを実行すると、メモ帳が起動します。

メモ帳が起動した図

このような場面では、raw文字列が必要となるのです。

raw文字列を使わない方法

上の例と同じことを、raw文字列を使わずに処理する方法がありますのでご紹介します。

通常、パスを表すときは「\」を一つしか入れませんが、ここを「\\」のように二つにします。

raw文字列を使わない方法の解説
import subprocess

notepad = "C:\\Windows\\System32\\notepad.exe"

subprocess.run(notepad)

こうすることで、raw文字列を使わなくても、パスを表すことができるのです。

結果は同じなので、どちらでもOKです。

まとめ

今回はraw文字列を使う必要性と実例を解説しました。

覚えておく必要はないけれど、困ったときにまた見に来てください。

他にも何か質問や疑問がある場合はフォームやコメントでお知らせください。

Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。

それでは、ステキなPythonライフを!

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 最近ではPythonを用いたアプリ開発、ウェブアプリケーションの開発と運営に没頭。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です