[解決!Python]abspath関数やPath.absoluteメソッドを使って絶対パスを求めるには:解決!Python
os.pathモジュールのabspath関数やpathlibモジュールのPath.absoluteメソッドを使って、何らかの相対パスを絶対パスに変換する方法を紹介する。
# 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.