Python でパスを正規化する
パスの正規化とは?
パスは通常、ディレクトリ名、ファイル名、パスの区切り文字 (スラッシュ / または バックスラッシュ\) で構成されます。
その他、現在のディレクトリを表す . や、親ディレクトリを表す .. もパスを構成することができます。
このため、次の三つのパスは書き方は違いますが、どれも同じパスを指しています。
/User/user1/docs/games/my_file.txt
/User/user1/docs/../docs/games/my_file.txt
/User/user1/./docs/./games/my_file.txt
.や .. を除去して、最もシンプルな形式でパスを書き直すことをパスの正規化といいます。
Python でパスを正規化する
「Python でパスを結合する」で説明したように、os.path.join() 関数を使うことで、パスを結合することができました。
ところが、 os.path.join() 関数では、相対パスで現在のディレクトリを表すドット . などが含まれたままになる場合があります。
パスを正規化し、同じパスに対していつも同じパス文字列を返すには os.path.normpath() 関数を使います。
import os
path = '/User/user1/docs/./games/my_file.txt'
s = os.path.normpath(path)
print(s) # /User/user1/docs/games/my_file.txt
パスを正規化することによって、いつも同じファイルを挿すのに同じパスを使うことができるようになります。