HOWTO · Python
Obtenir le chemin absolu en Python
Il démontre comment obtenir le chemin d'accès absolu d'un fichier en Python
Sur cette page
Pour obtenir le chemin absolu d’un fichier ou d’un répertoire en Python, appelez os.path.abspath() en lui passant le chemin, ou créez un objet Path avec pathlib, puis appelez Path.absolute(). Ces deux méthodes convertissent un chemin relatif en chemin absolu en fonction du répertoire de travail courant du processus. Elles fonctionnent pour les fichiers comme pour les répertoires, que la cible existe ou non.
Les sections ci-dessous définissent les chemins absolus, présentent chaque méthode, expliquent comment le répertoire de travail courant influe sur le résultat et précisent en quoi Path.absolute() diffère de Path.resolve().
Qu’est-ce qu’un chemin absolu ?
Un chemin absolu indique l’emplacement complet d’un fichier ou d’un répertoire à partir de la racine du système de fichiers, par exemple /work/myfile.txt sous Linux et macOS ou C:\work\myfile.txt sous Windows. Comme il part de la racine, il désigne un emplacement sans ambiguïté, quel que soit l’endroit où le programme s’exécute.
Un chemin relatif, comme myfile.txt ou docs/report.csv, n’a pas d’ancrage à la racine. Python l’interprète par rapport au répertoire de travail courant du processus : la même chaîne relative peut donc désigner des emplacements différents d’une exécution à l’autre. La convertir en chemin absolu lève cette ambiguïté avant d’ouvrir, de déplacer ou d’enregistrer le chemin.
Obtenir un chemin absolu avec os.path.abspath()
Le module os fait partie de la bibliothèque standard de Python. os.path.abspath() prend une chaîne représentant un chemin ; si celui-ci est relatif, la fonction le combine avec le répertoire de travail courant, puis normalise le résultat en supprimant les segments . et ...
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import os
absolute_path = os.path.abspath("myfile.txt")
print(absolute_path)
/work/myfile.txt
Ce programme s’est exécuté avec /work comme répertoire de travail courant ; os.path.abspath() a donc renvoyé /work/myfile.txt. Sous Windows, une exécution comparable renverrait une valeur telle que C:\work\myfile.txt : le format dépend du système d’exploitation, mais l’appel fonctionne de la même manière.
Vous pouvez reproduire le fonctionnement de la fonction en combinant os.getcwd() et le chemin relatif à l’aide de os.path.join() :
import os
absolute_path = os.path.join(os.getcwd(), "myfile.txt")
print(absolute_path)
/work/myfile.txt
os.getcwd() renvoie le répertoire de travail courant, et os.path.join() y ajoute le chemin relatif en utilisant le séparateur adapté à la plateforme. os.path.abspath() effectue cette combinaison à votre place et normalise aussi les segments . et ... Pour cette conversion courante, privilégiez donc l’appel direct plutôt que de construire le chemin manuellement.
Obtenir un chemin absolu avec pathlib.Path.absolute()
Le module pathlib propose une approche orientée objet pour manipuler les chemins du système de fichiers. Path.absolute() renvoie la forme absolue d’un objet Path :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from pathlib import Path
absolute_path = Path("myfile.txt").absolute()
print(absolute_path)
/work/myfile.txt
Si l’objet Path contient déjà un chemin absolu, Path.absolute() le renvoie sans le modifier :
from pathlib import Path
print(Path("/work/myfile.txt").absolute())
/work/myfile.txt
Ne confondez pas Path.absolute() avec Path.resolve(). Path.absolute() se contente de combiner un chemin relatif avec le répertoire de travail courant ; elle ne normalise pas les segments .. et ne suit pas les liens symboliques. Path.resolve() effectue ces deux opérations et peut aussi interroger le système de fichiers : le résultat peut donc différer du chemin saisi. Ces méthodes ne sont pas interchangeables. Choisissez Path.resolve() si vous devez éliminer les liens symboliques et les segments .., et Path.absolute() si vous avez seulement besoin d’une forme absolue.
Comprendre le répertoire de travail courant et le comportement des chemins
Chaque processus Python possède un répertoire de travail courant, que os.getcwd() indique :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import os
print(os.getcwd())
/work
os.path.abspath() et Path.absolute() interprètent tous deux les chemins relatifs par rapport à ce répertoire, et non par rapport au dossier qui contient votre script. Exécuter python app.py depuis deux répertoires différents produit donc deux chemins absolus différents pour une même chaîne relative. C’est une cause fréquente de confusion lorsqu’un programme ne trouve pas ses fichiers. Un appel à os.chdir() change le répertoire de travail pendant l’exécution ; calculez donc les chemins absolus dont vous avez besoin avant de changer de répertoire.
Deux points pratiques sont à retenir. Premièrement, aucune de ces méthodes ne vérifie que la cible existe : elles construisent uniquement la chaîne du chemin et fonctionnent de la même façon pour les fichiers et les répertoires. Deuxièmement, le format affiché dépend du système d’exploitation — barres obliques sous Linux et macOS, barres obliques inverses sous Windows — et les deux API utilisent le séparateur adapté.
Choisir entre os.path et pathlib
Les deux méthodes produisent un chemin absolu correct. Le choix dépend donc de votre style de code et des opérations que vous comptez effectuer ensuite.
- Utilisez
os.path.abspath()si vous manipulez déjà les chemins sous forme de chaînes ou si vous avez besoin d’une conversion rapide ; cette fonction s’accorde naturellement avec d’autres appels deos, commeos.getcwd(). - Utilisez
pathlibsi vous comptez continuer à manipuler le résultat. Un objetPathfournit.parent,.name,.stem, l’opérateur/pour combiner des chemins et des méthodes comme.exists(), ce qui rend plus lisible le code qui effectue plusieurs opérations sur les fichiers.
Pour une conversion ponctuelle, les deux conviennent. Dans du nouveau code qui effectue plusieurs opérations sur les chemins, pathlib est généralement plus lisible ; pour un appel unique, os.path.abspath() reste simple et fiable.