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における絶対パスと相対パス、ファイル名や親ディレクトリの取得などについての詳細は以下の記事を参照。