Pythonでカレントディレクトリを取得、変更(移動)
Pythonが実行されている作業ディレクトリ(カレントディレクトリ)を取得し確認、変更(移動)するには、os.getcwd()
とos.chdir()
を使う。
os
モジュールは標準ライブラリに含まれているので追加のインストールは必要ないが、インポートは必要。
なお、実行しているスクリプトファイル(.py
)のパスは__file__
で取得できる。以下の記事を参照。
カレントディレクトリを取得・確認: os.getcwd()
os.getcwd()
は現在Pythonが実行されている作業ディレクトリ(カレントディレクトリ)の絶対パスを文字列として返す。
print()
で出力し確認できる。
import os
path = os.getcwd()
print(path)
# /Users/mbp/Documents/my-project/python-snippets/notebook
print(type(path))
# <class 'str'>
getcwd
は「get current working directory」の略。ちなみにUNIXのpwd
コマンドは「print working directory」の略。
パス文字列の処理にはos.path
を使うと便利。詳細は以下の記事を参照。
カレントディレクトリを変更(移動): os.chdir()
os.chdir()
で作業ディレクトリ(カレントディレクトリ)を変更できる。
引数に移動先のパスを指定する。絶対パスでも相対パスでもよい。上の階層への移動は'..'
。
UNIXのcd
コマンドと同じように移動し、カレントディレクトリを変更できる。
os.chdir('..')
print(os.getcwd())
# /Users/mbp/Documents/my-project/python-snippets
os.chdir('notebook/data')
print(os.getcwd())
# /Users/mbp/Documents/my-project/python-snippets/notebook/data
chdir
は「change directory」の略。cd
と同じ。
実行しているスクリプトファイル(.py
)があるディレクトリに移動する場合は__file__
およびos.path
の関数を使う。
os.chdir(os.path.dirname(os.path.abspath(__file__)))
詳細は以下の記事を参照。
pathlibでのカレントディレクトリの取得・移動: Path.cwd()
pathlibはパスをオブジェクトとして操作するモジュール。標準ライブラリに含まれている。
Path
のクラスメソッドであるcwd()
はカレントディレクトリの絶対パスのPath
オブジェクトを返す。
from pathlib import Path
p = Path.cwd()
print(p)
# /Users/mbp/Documents/my-project/python-snippets/notebook
print(type(p))
# <class 'pathlib.PosixPath'>
OSによってPosixPath
またはWindowsPath
のインスタンスが生成される。Path
の基本については以下の記事を参照。
ドキュメントには明記されていないが、Path
のインスタンスからもcwd()
を呼べる。
print(p.cwd())
# /Users/mbp/Documents/my-project/python-snippets/notebook
pathlibにはカレントディレクトリを変更するメソッドはないので、上述のos.chdir()
を使う。os.chdir()
の引数にはPath
オブジェクトをそのまま指定可能。
import os
os.chdir(p.parent)
print(Path.cwd())
# /Users/mbp/Documents/my-project/python-snippets
os.chdir(p / 'data')
print(Path.cwd())
# /Users/mbp/Documents/my-project/python-snippets/notebook/data
上の例のように、parent
属性で親ディレクトリのPath
を取得したり、/
演算子でパスを連結したりできる。
pathlibにおける絶対パスと相対パス、ファイル名や親ディレクトリの取得などについての詳細は以下の記事を参照。