まだ割と新しいソースを観ると、凄い長いパスの指定の仕方をしているのを見かけるので。
疲弊する書き方
ソースがあるディレクトリ、親ディレクトリ、ファイルパスを指定する場合の昔ながらの書き方は次の通り。
# coding: utf-8
import os
# ソースがあるディレクトリ
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
# 親ディレクトリ
PARENT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
いーーーってなる。もしくは次のようにも書けるが。
# coding: utf-8
from os.path import dirname, absname, join
# ソースがあるディレクトリ
PROJECT_DIR = dirname(absname(__file__))
# 親ディレクトリ
PARENT_DIR = dirname(dirname(abspath(__file__)))
# ファイルパス
FILE_PATH = join(dirname(dirname(abspath(__file__))), 'ファイル名')
absnameはともかく、dirnameとjoinはなんか名前汚している感が半端なくて嫌。
pathlibを使おう
もう、pathlib使お?凄い楽だし。
# coding: utf-8
from pathlib import Path
# ソースがあるディレクトリ
PROJECT_DIR = Path().cwd()
# 親ディレクトリ
PARENT_DIR = Path().cwd().parent
# ファイルパス
FILE_PATH = Path().cwd().parent / 'ファイル名'
……すごくない?上2つは当然凄いけど、ファイルパスを / 演算子に割り当てたの、天才すぎない?考えた人、ホント天才。
というわけで疲弊しないために、pathlibを使おう!