記事内にはプロモーションが含まれています

【Python】絶対パスを取得する2つの方法!pathlibとos.pathを完全網羅

【Python】絶対パスを取得する2つの方法!pathlibとos.pathを完全網羅 プログラミングの疑問解決

Pythonでファイル操作を行う際、避けて通れないのがパス(Path)の扱いです。

特に、プログラムをどこから実行してもファイルを正しく読み込みたいという場面では、絶対パスの取得が必須となります。

「相対パスと絶対パス、どっちを使えばいいの?」
「os.pathとpathlib、今の主流はどっち?」
「実行中のスクリプトファイルの場所を知りたい!」

この記事では、こんな疑問を持つ方に向けて、Pythonで絶対パスを取得する方法を徹底解説します。

現在のスタンダードであるpathlibモジュールを中心に、従来のos.pathモジュールの使い方も併せて紹介しますので、是非参考にしてください。

【著者プロフィール&本記事の信頼性】
プロフィール
  • 著者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼 ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
プロフィール詳細はコチラ
当ブログ著者
当ブログ著者
忖度は一切なし!
本気で未経験からエンジニア転職を目指すなら、
日本最大級の比較サイト「マイベスト」で【4年連続人気NO.1】となった
RUNTEQ(ランテック)一択!
【RUNTEQの特徴】
✅受講生からの評判が驚くほど良い
✅学習はハードだが未経験とは思えないほど高いスキルが身に付く
挫折させない万全なサポート体制が用意されている
✅採用面接で担当者に刺さるレベルの高い「ポートフォリオ」を作成できる
✅給付金を使えば実質約13万円という格安料金で受講できる

\ もちろん勧誘行為は一切なし! 相談だけでもOK! /

絶対パスと相対パスの違いとは?

まずは、基本をおさらいしておきましょう。

絶対パス (Absolute Path)

ルートディレクトリ(WindowsならC:\、Mac/Linuxなら/)からファイルまでの完全な住所です。
特徴は、どこからプログラムを実行しても、必ず同じファイルを指し示せることです。
(例)C:\Users\username\project\data.csv

相対パス (Relative Path)

現在いる場所(カレントディレクトリ)を基準にしたファイルの場所です。
特徴は、プログラムを実行する場所によって、指し示すファイルが変わる可能性があることです。
(例)./data.csv (現在のフォルダにあるdata.csv)

Pythonで安定したファイル操作を行うには、相対パスを絶対パスに変換して処理するのが鉄則です。

Pythonで絶対パスを取得する2つの主要な方法

Pythonには、パス操作を行うためのモジュールが大きく分けて2つあります。

  1. pathlibモジュール (Python 3.4以降の標準 / 推奨)
  2. os.pathモジュール (古くからの標準)

これからの新規開発であれば、迷わずpathlibを使うことをおすすめします。

【推奨】pathlibを使って絶対パスを取得する

pathlibは、ファイルパスを賢く扱うための現代的なツールです。

相対パスを絶対パスに変換する (resolve)

Pathオブジェクトを作成し、resolve()メソッドを呼ぶだけで絶対パスに変換できます。

from pathlib import Path

# 相対パス(例:カレントディレクトリの 'data.txt')
relative_path = Path("data.txt")

# 絶対パスに変換
# resolve() はシンボリックリンクも解決した絶対パスを返します
absolute_path = relative_path.resolve()

print(f"相対パス: {relative_path}")
print(f"絶対パス: {absolute_path}")

# 実行結果例(Windowsの場合)
# 相対パス: data.txt
# 絶対パス: C:\Users\YourName\Projects\python-test\data.txt

現在のカレントディレクトリの絶対パスを取得 (cwd)

現在作業しているディレクトリ(カレントディレクトリ)の絶対パスを知りたい場合は、Path.cwd()を使います。

from pathlib import Path

# カレントディレクトリ(Current Working Directory)を取得
current_dir = Path.cwd()

print(f"現在の場所: {current_dir}")

実行中のスクリプトファイルの絶対パスを取得 (file)

実行しているこの.pyファイルがある場所を知りたいケースは非常に多いです。__file__変数とpathlibを組み合わせると簡単に取得できます。

from pathlib import Path

# __file__ は現在のスクリプトファイルのパス(環境により相対パスの場合あり)
# これをPathオブジェクトにしてresolve()することで確実な絶対パスになります
script_path = Path(__file__).resolve()

print(f"実行ファイルのパス: {script_path}")
print(f"実行ファイルのあるフォルダ: {script_path.parent}")

これを使えば、スクリプトと同じフォルダにある設定ファイルなどを、安全に読み込むことができます。

【従来】os.pathを使って絶対パスを取得する

既存のプロジェクトや、古いバージョンのPython環境ではos.pathが使われていることが多いです。
念のため、こちらについても知っておきましょう。

相対パスを絶対パスに変換する (abspath)

os.path.abspath()関数を使用します。

import os

relative_path = "data.txt"

# 絶対パスに変換
absolute_path = os.path.abspath(relative_path)

print(f"絶対パス: {absolute_path}")

現在のカレントディレクトリの絶対パスを取得 (getcwd)

os.getcwd()関数を使用します。

import os

# カレントディレクトリを取得
current_dir = os.getcwd()

print(f"現在の場所: {current_dir}")

実践!Pythonの絶対パス取得でよくあるケースと便利なテクニック

ここでは、Pythonで絶対パスを取得する際によくあるケースや、使えるテクニックを紹介していきます。

親ディレクトリの絶対パスを取得したい

プログラムを書いていると、「1つ上の階層にあるデータを使いたい」ということがあります。

pathlibの場合、.parent属性を使います。
.parent.parentと繋げれば、さらに上へ遡れます。

from pathlib import Path

current_file = Path(__file__).resolve()

# 1つ上の階層(親ディレクトリ)
parent_dir = current_file.parent

# 2つ上の階層
grandparent_dir = current_file.parent.parent

print(f"親ディレクトリ: {parent_dir}")

os.pathの場合、os.path.dirname()を入れ子にする必要があり、少しコードが長くなります。

import os

current_file = os.path.abspath(__file__)

# 1つ上の階層
parent_dir = os.path.dirname(current_file)

# 2つ上の階層
grandparent_dir = os.path.dirname(parent_dir)

print(f"親ディレクトリ: {parent_dir}")

パスを結合して新しいパスを作る

ディレクトリ名とファイル名を繋げて、新しい絶対パスを作りたい場合です。

pathlibの場合、スラッシュ / 演算子を使って、直感的にパスを結合できます。

from pathlib import Path

base_dir = Path("C:/Users/Data")
filename = "report.csv"

# スラッシュで結合可能
full_path = base_dir / "2025" / filename

print(full_path)
# 出力: C:\Users\Data\2025\report.csv (OSに合わせて区切り文字は自動調整されます)

os.pathの場合、os.path.join()関数を使います。

import os

base_dir = "C:\\Users\\Data"
filename = "report.csv"

# join関数で結合
full_path = os.path.join(base_dir, "2025", filename)

print(full_path)

Pythonで絶対パスを取得する際のよくある質問

Pythonで絶対パスを取得しようとした時に、よく遭遇する疑問について回答していきます。

__file__を使ったパス取得でエラーが出ます。

Jupyter Notebookや対話モード(REPL)では、__file__変数が定義されていないためエラーになります。

その場合はPath.cwd()で現在の作業ディレクトリを基準にするか、手動でベースパスを指定する必要があります。

pathlibとos.path、混ぜて使ってもいいですか?

Python 3.6以降であれば、os.path系の関数の引数にPathオブジェクトをそのまま渡せるようになったため、ある程度は混在可能です。

しかし、コードの可読性を保つため、可能な限りpathlibに統一することをおすすめします。

初心者がPythonについて効率的に学ぶには

Pythonでの絶対パス取得をはじめとするPythonの知識・スキルを効率的に習得するには、プログラミングスクールの活用が最も近道です。

スクールでスキルを高めることにより、今の仕事に活かしたり、副業として高単価な案件を受注できたりするだけでなく、Pythonエンジニアとして転職することも可能になります。

Pythonエンジニアは需要が非常に高いため、それに比例して年収も高くなる傾向にあります。
「今よりも年収を上げたい」「将来性の高い職種であるエンジニアへ転職したい」といった気持ちが強い場合は、プログラミングスクールでPythonの専門スキルを習得しつつ、ポートフォリオ支援や転職支援を受けてエンジニアへ転職する、という道を目指すのもよいでしょう。

なお、「Pythonに強く、受講生からの評判も良いプログラミングスクール」には、以下のようなところがあります。

その他、以下の記事でもPythonのおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。