高校日本史189951 views
高校生物550095 views
高校倫理1434311 views
雑学1472779 views
中学英語809236 views
高校国語786032 views
数学講師2858862 views
中学理科1627103 views
ヒストリア285067 views
MathPython492495 views
Help
Tools

English

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