
Pythonでファイルやディレクトリのパスを扱う際に便利なのが os.path モジュールです。
その中でも os.path.dirname() は、「ファイルパスからディレクトリ部分だけを取り出す」ための基本的な関数です。
この記事では os.path.dirname() の基本的な使い方から、活用シーン、注意点までをわかりやすく丁寧に解説します。
os.path.dirname() とは?
os.path.dirname() は、ファイルのパスからディレクトリ名(フォルダ部分)だけを抽出する関数です。
たとえば「/home/user/file.txt」というパスがあったときに、そのファイルが含まれているディレクトリ「/home/user」だけを取り出すことができます。
ファイルの保存先ディレクトリを取得したい時や、別のファイルとの相対パスを扱いたい時などによく使われます。
基本的な使い方
まずは、シンプルなパスに対して os.path.dirname() を使う基本のコードを見てみましょう。
|
1 2 3 4 5 6 7 |
import os path = "/home/user/data/file.csv" directory = os.path.dirname(path) print(directory) |
このコードでは:
"/home/user/data/file.csv"というファイルパスを指定os.path.dirname()を使って、ファイル名を除いたディレクトリ部分「/home/user/data」を抽出
ファイルの場所を知りたい時や、フォルダ構成を動的に扱いたい時に非常に便利です。
具体例:実行中スクリプトの場所を取得する
実行しているPythonスクリプトが存在するディレクトリを取得したいときは、__file__ と組み合わせて使います。
|
1 2 3 4 5 |
import os current_dir = os.path.dirname(__file__) print(current_dir) |
このコードでは:
__file__が現在のスクリプトのファイルパスを表しos.path.dirname(__file__)でスクリプトが置かれているディレクトリを取得
これは、設定ファイルの読み込みや相対パスの生成など、実行場所を基準にした処理を行いたいときによく使われます。
具体例:ファイル保存時のパス結合に使う
たとえば、実行中のスクリプトと同じ場所にファイルを保存したい場合は、次のように使います。
|
1 2 3 4 5 6 7 8 |
import os base_dir = os.path.dirname(__file__) file_path = os.path.join(base_dir, "output.txt") with open(file_path, "w") as f: f.write("保存完了") |
このように os.path.dirname() と os.path.join() を組み合わせることで、パスの結合も安全に行えます。
プラットフォームごとにディレクトリ区切り文字(/ や \)が異なるため、直接文字列を連結するよりもこの方法が推奨されます。
注意点:末尾がスラッシュのパスに注意
引数に渡すパスの末尾にスラッシュ(/ や \)があると、os.path.dirname() の結果が意図と異なる場合があります。
|
1 2 3 4 5 |
import os print(os.path.dirname("/home/user/data/")) # → /home/user print(os.path.dirname("/home/user/data/file.txt")) # → /home/user/data |
- スラッシュで終わっていると、そのスラッシュは無視されて1つ上の階層が返される
- 明示的に
os.path.normpath()で整形してから使うとより安全
そのため、確実な結果が必要なときは以下のようにするのがおすすめです。
|
1 2 3 |
path = os.path.normpath("/home/user/data/") directory = os.path.dirname(path) |
なぜ os.path.normpath()を使うのがおすすめか?
os.path.normpath() は、渡されたパスの正規化(=整理整頓)を行う関数で、次のような処理をしてくれます:
- 不要なスラッシュの削除(例:
"/home/user/data/"→"/home/user/data") - OSに合わせたパス表現に変換(Windowsなら
\区切りに)
そのため、os.path.dirname() を使う前に os.path.normpath() を通しておくことで、意図しない階層のずれを防げるのです。
まとめ
今回は os.path.dirname() の使い方について詳しく紹介しました。
os.path.dirname()はファイルパスからディレクトリ部分を取り出す関数- ファイルの保存先ディレクトリを取得したいときに便利
__file__と組み合わせてスクリプトの配置場所を取得可能os.path.join()と合わせて使えば、環境依存のないパス結合ができる- 末尾スラッシュの有無によって結果が変わるため注意が必要
パス操作は実務でよく使う処理です。
os.path.dirname() をしっかり使いこなして、柔軟なファイル操作ができるようになりましょう!

