高校倫理1433119 views
高校日本史189857 views
LaTeX957300 views
Computer365120 views
世界の国560595 views
MathPython491378 views
中学社会667106 views
小学理科717236 views
雑学1472593 views
りんご192546 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