【Python】Windowsでパス指定・表記する方法:FileNotFoundErrorの回避

時計 2023.04.19 / 時計

【Python】Windowsでパス指定・表記する方法:FileNotFoundErrorの回避

記事ではPythonにおける、Windowsパス指定するときの表記方法について解説していきます。

パソコンのOSがWindowsの場合、Pythonで作成したスクリプトでパスを指定すると下記のようなFileNotFoundErrorやunicode error “unicodeescape”といったエラーが発生することがあります。

Pythonで発生するエラー

FileNotFoundError:No such file or directory

Pythonのパス指定時に発生するエラーはWindows固有の原因があります。本記事を通して、Windowsでパス指定する際の表記方法について理解を深めてください。

Windowsでパス指定時に発生したエラー

私は普段Windowsパソコンを使用してPythonプログラムを作成しています。

Pythonスクリプト内でパス指定している場合、以下FileNotFoundErrorが発生することがあります。

Windowsで発生するエラー

FileNotFoundError:No such file or directory

例えば次のようなコードを実行するとFileNotFoundErrorが発生します。

import openpyxl
import os
wb = openpyxl.load_workbook(os.getcwd() + "\" + "excel.xlsx")

FileNotFoundErrorのほかにunicode error “unicodeescape”が発生することもあります。

Windowsでパス指定時にFileNotFoundErrorが発生する原因

Windows環境でパスを指定するとパスの区切り文字として「\(バックスラッシュ)」が使用されます。(環境によってはバックスラッシュが¥記号で表示されます)

しかしPythonではこの「\(バックスラッシュ)」がエスケープシーケンスとして扱われてしまいます。

つまりWindowsのパス指定でエラーが発生するのはパスにバックスラッシュが入っていることが原因であるということです。

IT用語の確認

エスケープシーケンスとは改行やバックスラッシュなど特殊な文字を表示するための記法です

Python で用意されているエスケープシーケンスは\\(バックスラッシュ)や\n(行送り)などがあります。例えば改行は以下のようにエスケープシーケンスで表記します。

example = "これはテストです。\nこれはテストです。"
print(example)
#これはテストです。
#これはテストです。

Macではパスの区切り文字が「/(スラッシュ)」のためWindowsのような問題が発生しません。

Windowsでパス指定するときの表記方法

WindowsでPythonによる開発を行う場合、パスの表記には以下の方法を利用するようにしましょう。

  • raw文字列を使う
  • パスの区切り文字を「\\」にする
  • パスの区切り文字を「/(スラッシュ)」にする
  • os.path.join()を使用する

上記の方法についてそれぞれ次項より詳しく解説していきます。

raw文字列を使う

raw文字列を使うことによりバックスラッシュをエスケープシーケンスではなく単なる文字として扱うようになります。

raw文字列の使用方法としては以下構文のように「r」を文字列の先頭に付けるだけです。

構文

r"文字列“
R”文字列”

パスを指定する場合はパスの先頭に「r」を付けるだけでエスケープシーケンスを無視するようになります。

path = r"C:\Users\office54\Desktop"
print(path)
# C:\Users\office54\Desktop

パスの区切り文字を「\\」にする

バックスラッシュ単体で利用するとエスケープシーケンスとみなされるため、バックスラッシュを2つ連続で使用することで単体のバックスラッシュとして利用できます。

path = "C:\\Users\\office54\\Desktop"

パスの区切り文字を「/」にする

Windowsではパスの区切り文字として「\(バックスラッシュ)」を用いますが、「/(スラッシュ)」を使用しても問題ありません。

LinuxやMacではスラッシュをパスの区切り文字として利用しているため、すべてのOS環境で利用できるようにWindowsでもパスの区切り文字としてスラッシュを利用することをお勧めします。

path = "C:/Users/office54/Desktop"

メソッドで取得したパスや変数に格納されているパスはバックスラッシュをスラッシュに変換してから利用するといいです。例えばos.getcwd()でカレントディレクトリを取得した場合はreplace()とos.sep()を使って区切り文字を変換しましょう。

import os
dir =os.getcwd().replace(os.sep,'/')

サンプルコードで使ったメソッドについて

os.getcwd()メソッドは現在のカレントディレクトリのパスを取得するメソッドです。getcwdは「get current working directory」の略です。

replace()メソッドは文字列を置換するためのメソッドです。第一引数に置換元の文字列、第二引数に置換後の文字列を指定します。

os.sepはパスの区切り文字を取得するための属性です。

os.path.join()を使用する

os.path.join()は指定した文字列をOSのパス区切り文字を使って結合してくれます。そのためOSの区切り文字を気にせずに利用することができます。

import os

dir = os.path.join('C:' + os.sep,'Users','office54','Desktop')

まとめ

本記事「【Python】Windowsでパス指定・表記する方法:FileNotFoundErrorの回避」はいかがでしたか。

WindowsでPythonによる開発を行っている場合はぜひパスの表記に気を付けてください。Windowsでパス表記をする場合は以下の方法いずれかを利用しましょう。

  • raw文字列を使う
  • パスの区切り文字を「\\」にする
  • パスの区切り文字を「/(スラッシュ)」にする
  • os.path.join()を使用する

上記の方法を利用して、Windowsでも問題なく動作するPythonプログラムを作成してください。