こんな方におすすめ
- Pythonのパス指定でエラーが出てしまって対処方法を知りたい人
- 他の記事見てもなんかよくわからないって人
Pythonでローカルのパスを指定しようとすると、エラーが出てしまう・・・
こんな悩み持たれているんじゃないでしょうか?
僕も困っていたので対処方法を解説しますね。
こんにちは、わやです。
皆さん、Pythonライフ楽しんでますか?
僕がPythonを勉強し始めた頃、ローカルに保存しているファイルパスを指定して、処理しようとしたところエラーが出てうまくいかなくて困ったことがありました。
今でもたまに対処方法を忘れてしまうので、備忘録も込みで解説しておきますね。
簡単なことではありますが、よく使う手法です。知らないだけで大きな損なのでしっかり覚えましょう!
パスの指定でエラーが出るときの対処方法
それでは早速ですが、対処方法を説明するために、症状・エラーが出る理由・対処方法の順でまとめます。
症状
パスの指定でエラーが出るときはこんな状態です。
from skimage import io img = io.imread('C:\Users\waya\Desktop\test.jpg')
↓エラー文
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
エラーが出る理由
エラーが出る原因ですが、簡単です。
Pythonでは、『\』はエスケープシーケンスという記述方式になってしまいます。
詳しくは、『【発展】パスの指定でエラーが出るときはraw文字列を使おう』で後述しますが、要するに使いたい『\』を使えてないわけです。
エスケープシーケンスとは?
エスケープシーケンスとは、「'」や「"」を始め、改行やタブ文字など特別な意味を持つ文字を使用するときに、その文字の前に付けて使用します。
例えば、「\\」→「\」、「\n」→改行など。
対処方法
対処方法は簡単です。
『\』がエスケープシーケンスとして処理されているならば、そうされないように処理してあげればいいわけです。
こういうときに使用する記述方法がraw文字列です。
raw文字列とは
raw文字列とは、『\』をエスケープシーケンスとみなさず、表記のままに解釈する文字列リテラルです。標準的な文字列リテラルの先頭に「r」または「R」をつけて表記します。
上の症状で書いたコードでやってみます。
from skimage import io """ 元のコード img = io.imread('C:\Users\waya\Desktop\test.jpg') """ #Cの前に『r』を添える img = io.imread(r'C:\Users\waya\Desktop\test.jpg')
どうですか?すごく簡単じゃないでしょうか。
Pythonにおいて、「\」は特別な意味を持ちます。めんどくさいですが、raw文字列の使い方をしっかり覚えて困らないようにしましょう!
ここでこの記事の目的は完了ですが、せっかくなのでエスケープシーケンスについてちょっと知ってみませんか?
【発展】エスケープシーケンスについて知ろう!
エスケープシーケンスとは、
エスケープシーケンスとは、「'」や「"」を始め、改行やタブ文字など特別な意味を持つ文字を使用するときに、その文字の前に付けて使用します。
例えば、「\\」→「\」、「\n」→改行など。
具体的なエスケープシーケンスを下の表にまとめました。
エスケープシーケンス | 概要 |
\\ | バックスラッシュ |
\' | シングルクォート |
\" | ダブルクォート |
\b | バックスペース |
\f | フォームフィード(改ページ) |
\n | 改行(ラインフィード) |
\r | 復帰(キャリッジリターン) |
\enter | バックスラッシュと改行文字を無視 |
\t | 水平タブ |
\v | 垂直タブ |
\oXX | 8進数の文字XX |
\xXX | 16進数の文字XX |
\uXXXX | 16bit(4桁)の16進数の文字XXXX |
\UXXXXXXXX | 32bit(8桁)の16進数の文字XXXXXXXX |
まとめ:パスの指定でエラーが出るときはraw文字列を使おう
パスの指定でエラーが出るときの対処方法としてraw文字列を使う方法を解説しました。
知っていれば簡単なことですが、知らないと時間をロスしてしまいます。
また使う機会も多いので、ぜひ覚えていただくか、ブックマークしてください。