現在のディレクトリパスと相対ディレクトリパスgoal_dir
をディレクトリツリーのどこかに結合したいので、goal_dir
への絶対パスを取得します。これは私の試みです:
import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
現在、現在のディレクトリがC:/here/I/am/
の場合、C:/here/I/am/../../my_dir
として結合されますが、必要なのはC:/here/my_dir
です。 os.path.join
はそれほど賢くないようです。
これどうやってするの?
最近、pathlibを発見しました。
from pathlib import Path
cwd = Path.cwd()
goal_dir = cwd.parent.parent / "my_dir"
または、現在のスクリプトのファイルを使用します。
cwd = Path(__file__).parent
goal_dir = cwd.parent.parent / "my_dir"
どちらの場合も、簡略化された形式の絶対パスは次のようになります。
goal_dir = goal_dir.resolve()
normpath 、 realpath または abspath を使用できます。
import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
print goal_dir # prints C:/here/I/am/../../my_dir
print os.path.normpath(goal_dir) # prints C:/here/my_dir
print os.path.realpath(goal_dir) # prints C:/here/my_dir
print os.path.abspath(goal_dir) # prints C:/here/my_dir
os.path.abspath
の使用を検討してください。これは絶対パスを評価します
またはos.path.normpath
を使用できます。これにより、正規化されたパスが返されます(パスの正規化、二重スラッシュの除去など)。
要件に応じて、これらの機能のいずれかを選択する必要があります
abspath
の場合例では、os.path.join
を使用する必要はありません
os.path.abspath("../../my_dir")
相対パスに関心がある場合は、os.path.normpath
を使用する必要があります。
>>> os.path.normpath("../my_dir/../my_dir")
'../my_dir'
ファイルパスを処理するためのその他のリファレンス: