ヒストリア286249 views
高校倫理1435564 views
小学算数1197091 views
雑学1472968 views
MathPython493541 views
LaTeX958621 views
中学理科1627879 views
りんご198536 views
数学講師2864684 views
中学数学622151 views

Python で絶対パスと相対パスを変換する

相対パスと絶対パスを相互に変換するには os.path.abspath()pathlib.Path.resolve() を使う。

相対パスを絶対パスに変換する

os.path.abspath() を使うと、相対パスを絶対パスに変換できる。

import os

relative = 'data/file.txt'
absolute = os.path.abspath(relative)

print(absolute)  # /home/user/project/data/file.txt

現在の作業ディレクトリを基準に絶対パスが生成される。ファイルが実際に存在するかどうかは確認されない。

pathlib を使う方法

pathlib では resolve() メソッドで絶対パスに変換できる。

from pathlib import Path

relative = Path('data/file.txt')
absolute = relative.resolve()

print(absolute)  # /home/user/project/data/file.txt

resolve() はシンボリックリンクも解決する。Python 3.6 以降では、ファイルが存在しなくてもエラーにならない。

絶対パスを相対パスに変換する

os.path.relpath() を使うと、絶対パスを相対パスに変換できる。

import os

absolute = '/home/user/project/data/file.txt'
relative = os.path.relpath(absolute)

print(relative)  # data/file.txt(現在のディレクトリが /home/user/project の場合)

第2引数で基準となるディレクトリを指定できる。

import os

absolute = '/home/user/project/data/file.txt'
relative = os.path.relpath(absolute, '/home/user')

print(relative)  # project/data/file.txt

pathlib で相対パスに変換する

pathlib では relative_to() メソッドを使う。

from pathlib import Path

absolute = Path('/home/user/project/data/file.txt')
base = Path('/home/user/project')

relative = absolute.relative_to(base)
print(relative)  # data/file.txt

relative_to() は、基準パスがターゲットパスの親でない場合に ValueError を発生させる。

絶対パスかどうかを判定する

パスが絶対パスかどうかを判定するには os.path.isabs() または Path.is_absolute() を使う。

import os
from pathlib import Path

# os.path
print(os.path.isabs('/home/user'))  # True
print(os.path.isabs('data/file'))   # False

# pathlib
print(Path('/home/user').is_absolute())  # True
print(Path('data/file').is_absolute())   # False