【Python】現在のディレクトリを取得する方法!AIエンジニアの僕がpathlibを推す理由

【Python】現在のディレクトリを取得する方法!AIエンジニアの僕がpathlibを推す理由 Python

やあ、シミヅです!

最近、僕の会社では新しい大規模言語モデルの微調整(ファインチューニング)をやっていて、大量の学習データを読み込ませる作業に追われています。

そこで一番怖いのが、プログラムを実行した時に「ファイルが見つかりません!」っていうエラーが出ることなんですよ(笑)。

「えっ、ちゃんとそこにファイル置いてあるじゃんっ!」って思っても、実はPythonが「今いる場所」を勘違いしていることが原因だったりするんですよね……。

というわけで、今回はPythonプログラミングの基本中の基本、「現在のディレクトリ(カレントディレクトリ)を取得・操作する方法」について、僕と一緒にマスターしていきましょうっ!

【執筆者の簡易プロフィール】
シミヅ 執筆者:シミヅ
  • 29歳男性、独身
  • Web開発や業務システムなどいろいろやった後、AIに強い興味を持ち、AI開発企業へ転職
  • 主な使用言語はPython
  • 趣味は「合コン」と「バスケ」

定番の「os.getcwd()」で場所を確認する

Pythonで「今の場所」を知りたい時に、一番歴史が長くて有名なのが os モジュールを使う方法なんですよ!
「getcwd」は「Get Current Working Directory」の略ですね。

まずは、一番シンプルなコードを見てくださいっ。

import os

現在のディレクトリを取得して表示する
current_dir = os.getcwd()
print(f"今の場所はここだよっ:{current_dir}")

このコードの動きを解説しますね!

まず、import os でOS依存の機能を扱うためのモジュールを呼び出します。
そして os.getcwd() を実行すると、そのプログラムが今「どのフォルダで動いているか」という情報を文字列(str型)で返してくれるんです。

デバッグの時に「とりあえず今の場所をプリントして確認っ!」という用途で、僕もよく使っていますよ!

モダンな書き方!「pathlib」を使ってスマートに取得する

実は最近のPython(3.4以降)では、さっきの os よりももっと直感的でスマートな書き方があるんです。
それが、僕も大好きな pathlib というライブラリですっ!

「パスを文字列じゃなくて、一つの『オブジェクト』として扱おうよ」という考え方で作られていて、これが最高に使いやすいんですよ。

from pathlib import Path

Pathオブジェクトを使ってカレントディレクトリを取得
current_path = Path.cwd()
print(f"pathlibで取得:{current_path}")

文字列として使いたい場合は変換も簡単!
path_str = str(current_path)

解説しますっ!

from pathlib import Path でPathクラスをインポートします。
そして Path.cwd() を呼ぶだけで、現在のディレクトリが取得できます。

「os.getcwd()と何が違うの?」って思うかもしれませんが、pathlib で取得した結果は単なる文字じゃないので、そのまま「上のフォルダに移動」とか「ファイル名を結合」といった操作がメソッド一つでできちゃうんです。

これ、複雑なディレクトリ構造を扱うAI開発の現場では、コードがスッキリして本当に助かるんですよっ!

【重要】実行ディレクトリと「スクリプトがある場所」は違うんですっ!

ここ、初心者の受講生の方からよく質問される、めちゃくちゃ重要なポイントです!
「現在のディレクトリ」というのは、あくまで「Pythonコマンドを叩いた場所」であって、「プログラムのファイル(.py)が置いてある場所」とは限らないんです。

例えば、C:\project に移動してから python src/main.py と実行すると、カレントディレクトリは C:\project になります。
でも、ソースコードが置いてあるのは C:\project\src ですよね?

「ファイルがある場所を基準にパスを指定したいっ!」という時は、以下の書き方を使います。

import os

実行中のスクリプトファイルが存在するディレクトリを取得
script_dir = os.path.dirname(os.path.abspath(file))
print(f"スクリプトがある場所:{script_dir}")

コードの内容を説明しますね。

file というのは、実行中のスクリプト自身のパスが入っている特別な変数です。
それを os.path.abspath() で絶対パスに変換して、さらに os.path.dirname() で「そのファイルが入っているフォルダ名」だけを抜き出しています。

これを覚えておかないと、別のフォルダからプログラムを起動した瞬間にパスが壊れて全滅しちゃうので、要注意ですよっ!

カレントディレクトリを自由に変更する方法

場所を確認するだけじゃなくて、プログラムの途中で「作業場所を別のフォルダに移したいな」という時もありますよね。

そんな時は os.chdir() を使います!
「Change Directory」の略ですね。

import os

移動したい先のパスを指定
target_path = "./data_folder"

ディレクトリが存在するか確認してから移動するのが「シミヅ流」!
if os.path.exists(target_path):
os.chdir(target_path)
print(f"移動に成功したよっ!今の場所:{os.getcwd()}")
else:
print("指定したフォルダが見つからないみたいっ……")

解説ですっ!

os.chdir(パス) を実行すると、それ以降の相対パス指定がすべて移動先を基準にするようになります。

ただし、いきなり移動しようとすると、フォルダがなかった時にエラーで止まってしまいます。
なので、僕のコード例のように os.path.exists() で存在チェックを挟むのが、現場で「壊れないツール」を作るためのコツなんですよ!

まとめ:パス操作を極めてエラー知らずのエンジニアに!

Pythonで現在のディレクトリを扱う方法、しっかり整理できましたか?

手軽に確認するなら os.getcwd()
これからはモダンな pathlib.Path.cwd() がおすすめっ!
「実行した場所」と「ファイルがある場所」の違いを意識する!
移動は os.chdir() だけど、存在チェックを忘れずにっ!

ディレクトリ操作が完璧になれば、ファイル読み込みのバグは激減しますよ。
僕も新人の頃はよく「FileNotFoundError」と戦っていましたが、この基本を叩き込んでからはスムーズに開発できるようになりましたっ。

以上、シミヅでしたっ!またね!

コメント

タイトルとURLをコピーしました