[解決!Python]カレントディレクトリ(作業ディレクトリ)を取得したり、移動したりするには解決!Python

os.getcwd関数とPath.cwdメソッドでカレントディレクトリを取得したり、os.chdir関数でカレントディレクトリを移動したりする方法を紹介する。

» 2023年10月24日 05時00分 公開
[かわさきしんじDeep Insider編集部]
「解決!Python」のインデックス

連載目次

# カレントディレクトリの取得
import os

d = os.getcwd()
print(d)

from pathlib import Path
d = Path.cwd()
print(d)
print(type(d))

# カレントディレクトリの移動
import os

os.chdir('..')
d = os.getcwd()
print(d)


カレントディレクトリの取得と移動

 Pythonでカレントディレクトリ(作業ディレクトリ)を取得するには幾つかの方法がある。代表的なのは以下の2つだ。

  • osモジュールのgetcwd関数を呼び出す
  • pathlibモジュールのPath.cwdクラスメソッドを呼び出す

 カレントディレクトリを移動するにはosモジュールのchdir関数を使用する。

カレントディレクトリの取得

 カレントディレクトリを取得する最も一般的な方法はosモジュールのgetcwd関数を呼び出すことだろう。以下に例を示す。

import os

d = os.getcwd()
print(d)


 この関数はパラメーターを持たず、呼び出すとカレントディレクトリを表す文字列を返してくる。

 macOSでの実行結果の例を以下に示す。

macOSでの実行結果の例 macOSでの実行結果の例

 Windowsでの実行結果の例を以下に示す。

Windowsでの実行結果の例 Windowsでの実行結果の例

 pathlibモジュールのPathクラスにはcwdクラスメソッドがあり、これを使っても同様な処理が行える。以下に例を示す。

from pathlib import Path
d = Path.cwd()
print(d)
print(type(d))


 os.getcwd関数と異なるのは、Path.cwdクラスメソッドはカレントディレクトリを表すPathオブジェクト(実際にはPosixPathオブジェクトまたはWindowsPathオブジェクト)を返す点だ。

 macOSでの実行結果の例を以下に示す。

macOSでの実行結果の例 macOSでの実行結果の例

 Windowsでの実行結果の例を以下に示す。

Windowsでの実行結果の例 Windowsでの実行結果の例

 返送されたオブジェクトの型がmacOSではPosixPathに、WindowsではWindowsPathになっている点に注目されたい。

 なお、カレントディレクトリを表すPathオブジェクトを作成して、resolveメソッドを呼び出すという方法もあるが、このメソッドはパス操作の際に、最終的にカレントディレクトリを表す「.」や上位ディレクトリを表す「..」を含んだパスを絶対パスとする必要が出てきた時点で使用するものだと考えた方がよいだろう。

d = Path('.').resolve()
print(d)


カレントディレクトリの移動

 カレントディレクトリ(作業ディレクトリ)を移動するにはosモジュールのchdir関数を使用する。同等な関数/メソッドはpathlibモジュールにはない。この関数はパス(相対パス/絶対パス)を表す文字列やPathオブジェクトを引数に受け取り、指定されたパスをカレントディレクトリとする。

 以下に例を示す。

import os

os.chdir('..')
d = os.getcwd()
print(d)


 この例では1つ上位のディレクトリである「..」を引数に指定している。そのため、先ほどの例で見たカレントディレクトリの親ディレクトリが新しいカレントディレクトリとなる。

 Pathオブジェクトを使用する場合なら以下のようになる。

os.chdir(Path('..'))


 移動先のディレクトリが決め打ちであれば、Pathオブジェクトを使わずに文字列でパスを指定するのがよいだろう。そうではなく、何らかの計算でパスを求めているのであれば、このような書き方をすることも出てくるかもしれない。

「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。