[解決!Python]abspath関数やPath.absoluteメソッドを使って絶対パスを求めるには解決!Python

os.pathモジュールのabspath関数やpathlibモジュールのPath.absoluteメソッドを使って、何らかの相対パスを絶対パスに変換する方法を紹介する。

» 2022年11月08日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

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

連載目次

# os.path.abspath関数を使った絶対パスの取得
from os.path import abspath

mypath = 'mypath'
absolute_path = abspath(mypath)
print(absolute_path)  # # 「/Users/username/……/pytips_0110/test/mypath」など

mypath = '/usr/local'
# mypath = 'C:\\windows'  # Windowsの場合の絶対パスの例
absolute_path = abspath(mypath)
print(absolute_path)  # /usr/local

# パスが絶対パスでない場合の処理は以下と同等
from os import getcwd
from os.path import join

mypath = 'mypath'
cur_dir = getcwd()
absolute_path = join(cur_dir, mypath)
print(absolute_path)  # # 「/Users/username/……/pytips_0110/test/mypath」など

# pathlib.Path.absoluteメソッドを使った絶対パスの取得
from pathlib import Path

mypath = Path('mypath')
absolute_path = mypath.absolute()
print(absolute_path)  # 「/Users/username/……/pytips_0110/test/mypath」など

mypath = Path('/usr/local')
# mypath = Path('c:\\windows')  # Windowsの場合の絶対パスの例
absolute_path = mypath.absolute()
print(absolute_path)  # /usr/local

# パスが絶対パスでない場合の処理は以下と同等
mypath = Path('mypath')
cwd = mypath.cwd()
parts = mypath.parts
absolute_path = Path(cwd, Path(*parts))
print(absolute_path)  # 「/Users/username/……/pytips_0110/test/mypath」など


 Pythonの標準ライブラリを使ってあるパスの絶対パスを求める方法としては、os.pathモジュールのabspath関数を使うものと、pathlibモジュールのPath.absoluteインスタンスメソッドを使うものの2種類がある。

os.path.abspath関数を使った絶対パスの取得

 os.pathモジュールのabspath関数は引数に渡したパスの絶対パスを返送する。その動作は次のようになっている。

  • 指定したパスが絶対パスなら、それをそのまま返送する
  • 指定したパスが絶対パスでなければ、そのパスがプログラムを実行しているディレクトリに対する相対パスであると解釈して、カレントディレクトリとパスから絶対パスを構築して返送する

 以下に例を示す。

from os.path import abspath

mypath = 'mypath'
absolute_path = abspath(mypath)
print(absolute_path)  # # 「/Users/username/……/pytips_0110/test/mypath」など


 この例では変数mypathの内容は「mypath」であり、スラッシュ「/」(LinuxやmacOSの場合)やドライブ文字とそれに続くダブルバックスラッシュ(Windowsの場合。「c:\\」など)で始まっていない。そのため、これは絶対パスではなく、カレントディレクトリに対する相対パスとして解釈されて、カレントディレクトリに変数mypathの内容が連結されたものが返送される。

 絶対パスを渡すと次のようになる。

mypath = '/usr/local'
# mypath = 'C:\\windows'  # Windowsの場合の絶対パスの例
absolute_path = abspath(mypath)
print(absolute_path)  # /usr/local


 この例では変数mypathは絶対パスになっているので、その内容がそのまま返送される。

 変数が示しているのが相対パスである場合の処理はだいたい次のコードと同様だ。

from os import getcwd
from os.path import join

mypath = 'mypath'
cur_dir = getcwd()
absolute_path = join(cur_dir, mypath)
print(absolute_path)  # # 「/Users/username/……/pytips_0110/test/mypath」など


 これまでにも述べた通り、abspath関数に渡すパスが相対パスであるときには、カレントディレクトリの内容と相対パスとが連結されたものが返送される。

Path.absoluteメソッド

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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