読み込みファイルのパス指定で「(unicode error) ‘unicodeescape’」が出た時の解決策(WindowsのPython)

WindowsOSでPythonを使ってプログラミングを実行していると、ファイルの読み込み時などに「(unicode error) 'unicodeescape’」というエラーが出ることがあります。

これはファイルのパスを指定する際の「¥(バックスラッシュ)」がエスケープ文字であるがゆえにエラーを引き起こしています。

そこで、実行エラーでunicdeescapeが出たときの対処方法を解説します。

WindowsOSでPythonプログラミング

PythonのプログラミングはWindowsOSでもよく行われています。

JavascriptやPHPなどのフレームワークを利用するプログラミング言語はMacでの利用が主流です。

PythonでもMacOSの方が便利ではありますが、業務改善やデータ分析での利用はWindowsでの利用が多いです。

WindowsでPythonファイル読み込みでエラー

WindowsOSでPythonを使う際に、端末にあるファイルを読み込むコードを書くことがあります。

WindowsOSでPythonを使って読み込みたいファイルがあるフォルダとファイルパス

例えば、上記のようなCドライブ配下のデスクトップに配置されたフォルダ内にあるファイルを読み込む場合です。

※今回はopenpyxlライブラリを使って、Excelブックを読み込みます。

この時、エクスプローラーの表示されたファイルのカレントディレクトリをコピペし、絶対パスを引数に指定してファイルを読み込もうと試みます。

Windows環境でPythonのファイル読み込みを絶対パスで指定

Windows上でエクスプローラー内に表示された絶対パスをコピーし、ファイル名を追加しただけなので、誤字が発生する余地はありません。

しかし、いざファイルを読み込むプログラムを実行するとエラーが表示され、実行失敗してしまいました。

「SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape」というエラーメッセージが表示されPythonプログラムがエラー(Windows)

SyntaxError:(unicode error) 'unicodeescape’

エラーメッセージの詳細としては以下のように出力されています。

SyntaxError: (unicode error) 'unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape

シンタックスエラーという構文エラーが発生しており、その中でユニコードエラーと出ています。

ユニコードというのは文字コードの1種なので、ファイル読み込みで指定した絶対パスの文字周りにエラーがありそうです。

(unicode error) 'unicodeescape’の対処方法

Windows環境において、Pythonのファイル読み込みで、「SyntaxError: (unicode error) 'unicodeescape’ codec can’t decode bytes」が出た場合の原因は、「\(またはバックスラッシュ)」です。

この「\」はPythonではエスケープ文字に指定されており、単なる文字ではない特別な意味を持っています。

「\」が読み込むファイルのパスに指定されると、正しいファイルパスが解釈できずプログラムがエラーします。

ファイル読み込み時に問題となるエスケープ文字「\」の対処方法は以下の2パターンです。

  1. 「\」をエスケープ文字でない単なる文字列として扱う
  2. 「\」ではなく「/」に置換する

「\」をエスケープ文字でない単なるraw文字列として扱う

\を特別な意味を持つエスケープ文字としてではなく、単なる文字列として扱うようにするのがraw文字列です。

これはファイル読み込み時に引数指定するファイルパスの文字列の前に「r」をつけることで、「"(')に囲われた文字列にはエスケープ文字は無視する」raw文字列にできます。

WindowsのPythonでファイル読み込み時に「SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes」エラーが出た時はraw文字列として扱うのが解決策

こうすることでエクセルファイルの読み込みに成功し、Pythonプログラムを実行するブック内のシートのセルを取得できます。

「\」ではなく「/」に置換する

もう1つの方法が特別な意味を持つエスケープ文字「\」を「/」に変えてしまうことです。

WindowsのPythonでファイル読み込みでユニコードエラーが出た場合に¥を/に変更するとエラー解消

通常のスラッシュはエスケープ文字ではなく、ファイルパスの指定でフォルダ(ディレクトリ)の階層を現しているため、正常にファイルを読み込めるようになります。

相対パスでも別フォルダを読み込む際は注意

なお、これまでの事例ではWindowsでは必ず「\」を使う絶対パスを引数に指定していました。

ただ、絶対パス以外にも相対パスでも(unicode error) 'unicodeescape’エラーは発生します。

Pythonファイルと同じフォルダにあるファイルを読み込む場合は問題ありません。

しかし、階層が異なると相対パスでも本エラーが起こりえます。

Pythonのopenpyxlライブラリを使い、既存の別フォルダ(ディレクトリ)にあるエクセルファイル(ワークブック)を相対パスで指定して読み込み、セルの値を表示するサンプルコード(Windows)

相対パスで指定する場合も同じくraw文字列として表現する、または「\→/」に置き換えて対応しましょう。

まとめ・終わりに

今回、WindowsでPythonを動かしているときに、読み込みファイルのパス指定で「(unicode error) 'unicodeescape’」エラーが出たときの対処方法を紹介しました。

このエラーはエスケープ文字の部分がおかしいことをしているエラーです。

Windowsのフォルダエクスプローラーに表示されている絶対パス+ファイル名をそのまま引数指定すると、エラーになってしまいます。

「(unicode error) 'unicodeescape’」エラーを解消するには、raw文字列として引数指定する、または\→/への変換が必要です。

どちらでも大丈夫ですが、変換が手間な場合はraw文字列を使用してファイルパスを引数指定する際に、rを忘れずつけるようにしましょう。