全般

[Python] ディレクトリを移動する方法(具体例あり)

今回は、Pythonでディレクトリを移動する方法についてご紹介します。

Pythonでは、ディレクトリを移動する際にosモジュールを活用します。

os.chdir()を使うと、指定したパスに作業ディレクトリを変更できます。

ただし、プログラム全体やマルチスレッド環境で実行する際は、予期しない影響を与えないように注意が必要です。

以下では、ディレクトリ変更の基本から、コンテキストマネージャを用いた一時的な変更方法、外部コマンド実行時のディレクトリ指定などを解説します。

Pythonでディレクトリを移動する基本的な方法

os.chdir()を使うと、絶対パスあるいは相対パスを指定してディレクトリを変更できます。

絶対パスでの移動

絶対パスを指定すれば、どこからでも正確に目的のディレクトリへ移動できます。

実行結果

現在のディレクトリ: /path/to/directory

os.getcwd()で現在の作業ディレクトリを確認できます。

相対パスでの移動

相対パスを指定することで、今いるディレクトリを基準とした移動ができます。

実行結果

親ディレクトリに移動: /path

相対パスを使う場合は、どの位置から移動するのかを明確に理解しておくことが大切です。

pathlibモジュールを利用したディレクトリ移動

pathlibはパスをオブジェクトとして扱えるため、コードをより直感的に書けます。

ただし、ディレクトリの移動自体はos.chdir()を使う必要があります。

実行結果

新しい作業ディレクトリ: /path/to/directory

Pathオブジェクトを直接os.chdir()に渡せる点が特徴です。

一時的にディレクトリを移動する方法(コンテキストマネージャ)

一時的にディレクトリを変更し、処理が終わったら自動的に元のディレクトリに戻したい場合はコンテキストマネージャを利用すると便利です。

実行結果

一時的な作業ディレクトリ: /path/to/directory
元のディレクトリに戻りました: /path

ブロック内では新しいディレクトリが設定され、ブロックを抜けると元のディレクトリに戻ります。

外部コマンド実行時に作業ディレクトリを指定する方法

Pythonから外部コマンドを呼び出す場合、subprocessを利用することがあります。

このとき、subprocess.run()などのcwd引数で実行時のディレクトリを指定可能です。

この方法では、Pythonのプロセス自体の作業ディレクトリは変更されないため、限定的にディレクトリを変更したい場合に有効です。

ディレクトリ変更時の注意点とよくあるエラー

FileNotFoundErrorの発生を防ぐには、移動先ディレクトリが存在しているかどうかを事前に確認することが大切です。

os.chdir()でディレクトリを変更すると、同じプロセス内で動作する他の処理に影響を与える可能性があります。

マルチスレッド環境ではコンテキストマネージャを使ってスコープを限定すると、予期しない動作を防ぎやすくなります。

また、相対パスに依存したコードでは、カレントディレクトリが変わると思わぬ不具合が生じることもあるため、必要に応じて絶対パスを使うことが推奨されます。

まとめ

ディレクトリを変更する場合はos.chdir()が基本となり、pathlibコンテキストマネージャを組み合わせると柔軟に扱えます。

外部コマンドを呼び出す際は、subprocesscwd引数が便利です。

パスの存在確認や影響範囲の管理を意識しながら、安全にディレクトリ移動を行いましょう。