BOOK Studio947
狩野祐東・狩野さやか著書

Pythonでファイルのパスを扱う

実行ファイルのパスを取得

実行ファイルのパスを取得するには__file__を使う。ただしこれはカレントワーキングディレクトリからの相対パスが返ってくる。

print(__file__)

pathlibモジュール

ファイルパスの操作にはpathlibモジュールを使う。

基本の使い方はこう。Path()のパラメータを指定しない場合は.が返ってくる。

from pathlib import Path


path = Path() # カレントワーキングディレクトリの相対パスが保存されたPathオブジェクトが作られる。
print(path)
>>> .

Path()で取得した相対パスを絶対パスに変換したいときは、Path.resolve()を使用する。

from pathlib import Path

path = Path()
abspath = path.resolve()
print(abspath)

また、Path.parentは1階層上のパスを返す。たとえば、実行ファイルと同じ階層に別のファイルを保存したいときなどに使える。
実行ファイルのパスからそのディレクトリの絶対パスを取得したいときには次のようにする。

path = Path()
abspath = path.parent.resolve()

ホームディレクトリの絶対パスを返す

ホームディレクトリの絶対パスを返すにはhome()メソッドを使って次のようにする。

path = Path()
home = path.home()
print(home)

カレントワーキングディレクトリを返す

カレントワーキングディレクトリはcwd()メソッド。

path = Path()
cwd = path.cwd()
print(cwd)

パスを結合して新たなパスを作成

実行ファイルと同階層にデータファイルを保存したいときなど、絶対パスでパスを作成するときは、ディレクトリを「/」で区切って並べればよい。
次の例では実行ファイルと同階層にnew_file.txtを(作る)つもりでパスを作成している(前のPath.parentも参照)。この処理の段階でそこに実際のファイルやフォルダがあってもなくてもOK。

path = Path()
dir = path.parent
abspath = dir.resolve()
new_file = abspath / 'new_file.txt'
print(new_file)

ファイルを作成するにはnew_fileのファイルをopenすればよい。たとえばこんな感じ。

new_file = abspath / 'new_file.txt'
# ファイルを作成または開く
downloaded = open(new_file, 'w')

パスを文字列に変換

Pathlibでつくったパスを文字列に返すには次のようにする。ほかのメソッドのパラメータとしてパスを渡す必要があるときなどに ex.) Seleniumのsave_screenshot()など。

str(Path)

狩野 祐東

Web/アプリケーションUIデザイナー、エンジニア。執筆家。 アメリカ・サンフランシスコに留学、UIデザイン理論を学ぶ。Webサイトやアプリケーションのデザイン・開発、関連技術書籍の執筆を数多く手がける。株式会社Studio947代表。