Python pathlibで絶対パスと相対パスを相互変換・判定する方法
絶対パスと相対パスの判定
is_absolute() – 絶対パスかどうかの判定
from pathlib import Path
# 絶対パスの例
abs_path = Path('/home/user/documents/file.txt')
print(abs_path.is_absolute()) # True
# 相対パスの例
rel_path = Path('documents/file.txt')
print(rel_path.is_absolute()) # False
# Windowsの場合
win_abs = Path('C:/Users/user/file.txt')
print(win_abs.is_absolute()) # True
相対パスから絶対パスへの変換
resolve() – 絶対パスへの変換
from pathlib import Path
# 現在のディレクトリからの相対パス
rel_path = Path('data/sample.txt')
abs_path = rel_path.resolve()
print(abs_path) # /current/directory/data/sample.txt
absolute() – 絶対パスへの変換(非正規化)
from pathlib import Path
rel_path = Path('../data/sample.txt')
abs_path = rel_path.absolute()
print(abs_path) # シンボリックリンクを解決しない
絶対パスから相対パスへの変換
relative_to() – 基準パスからの相対パスを取得
from pathlib import Path
# 絶対パス
abs_path = Path('/home/user/documents/data/sample.txt')
base_path = Path('/home/user/documents')
# 相対パスに変換
rel_path = abs_path.relative_to(base_path)
print(rel_path) # data/sample.txt
現在のディレクトリからの相対パスを取得
from pathlib import Path
import os
# 現在のディレクトリ
current_dir = Path.cwd()
target_path = Path('/home/user/documents/file.txt')
try:
rel_path = target_path.relative_to(current_dir)
print(f'相対パス: {rel_path}')
except ValueError:
print('相対パスに変換できません')
パスの正規化
resolve()による正規化
from pathlib import Path
# .. や . を含むパス
messy_path = Path('./data/../data/./sample.txt')
clean_path = messy_path.resolve()
print(clean_path) # 正規化されたパス
実用的な使用例
プロジェクトルートからの相対パス取得
from pathlib import Path
def get_project_relative_path(file_path, project_root):
"""プロジェクトルートからの相対パスを取得"""
file_path = Path(file_path).resolve()
project_root = Path(project_root).resolve()
try:
return file_path.relative_to(project_root)
except ValueError:
return None
# 使用例
project_root = Path('/home/user/myproject')
file_path = Path('/home/user/myproject/src/main.py')
rel_path = get_project_relative_path(file_path, project_root)
print(rel_path) # src/main.py
設定ファイルの場所を動的に決定
from pathlib import Path
def get_config_path():
"""設定ファイルのパスを取得"""
# スクリプトの場所を基準にする
script_dir = Path(__file__).parent
config_path = script_dir / 'config' / 'settings.ini'
return config_path.resolve()
config_path = get_config_path()
print(config_path)
エラーハンドリング
relative_to()のエラー対処
from pathlib import Path
def safe_relative_to(path, base):
"""安全な相対パス変換"""
try:
return Path(path).relative_to(base)
except ValueError as e:
print(f'相対パス変換エラー: {e}')
return None
# 使用例
result = safe_relative_to('/tmp/file.txt', '/home/user')
if result:
print(f'相対パス: {result}')
else:
print('変換できませんでした')
まとめ
pathlibを使った絶対パスと相対パスの変換は、従来のos.pathよりも直感的で読みやすいコードが書けます。特にresolve()とrelative_to()メソッドを組み合わせることで、柔軟なパス操作が可能になります。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

