Je veux joindre le chemin de répertoire actuel et un chemin de répertoire relatif goal_dir
quelque part dans l'arborescence des répertoires, donc j'obtiens le chemin absolu vers goal_dir
. Voici ma tentative:
import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
Maintenant, si le répertoire courant est C:/here/I/am/
, il les rejoint en tant que C:/here/I/am/../../my_dir
, mais ce que je veux c'est C:/here/my_dir
. Il paraît que os.path.join
n'est pas si intelligent.
Comment puis-je faire ceci?
Dernièrement, j'ai découvert pathlib.
from pathlib import Path
cwd = Path.cwd()
goal_dir = cwd.parent.parent / "my_dir"
Ou, en utilisant le fichier du script actuel:
cwd = Path(__file__).parent
goal_dir = cwd.parent.parent / "my_dir"
Dans les deux cas, le chemin absolu sous forme simplifiée peut être trouvé comme ceci:
goal_dir = goal_dir.resolve()
Vous pouvez utiliser normpath , realpath ou 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
envisager d'utiliser os.path.abspath
ceci évaluera le chemin absolu
ou On peut utiliser os.path.normpath
cela retournera le chemin normalisé (Normaliser le chemin, éliminer les doubles barres obliques, etc.)
Il faut choisir l'une de ces fonctions en fonction des besoins
Dans le cas de abspath
Dans votre exemple, vous n'avez pas besoin d'utiliser os.path.join
os.path.abspath("../../my_dir")
os.path.normpath
doit être utilisé si vous êtes intéressé par le chemin relatif.
>>> os.path.normpath("../my_dir/../my_dir")
'../my_dir'
Autres références pour la gestion des chemins de fichiers: