HOWTO · Python
Obtenir le répertoire du chemin en Python
Ce tutoriel montre comment extraire une partie du chemin du fichier en Python.
Sur cette page
Pour obtenir le répertoire parent à partir d’un chemin de fichier, transmettez ce chemin à os.path.dirname(). Comme solution orientée objet, utilisez Path(file_path).parent avec pathlib. Ces deux méthodes renvoient le répertoire qui contient le fichier ; elles n’indiquent pas le répertoire de travail actuel du processus.
Les exemples utilisent des chemins avec des barres obliques pour faciliter la lecture des résultats. Les fonctions de chemin de Python interprètent les chemins selon le système d’exploitation hôte. Pour construire un chemin à partir de valeurs distinctes, utilisez os.path.join() ou pathlib au lieu d’insérer vous-même un séparateur.
Comprendre les séparateurs de chemin
Un chemin sépare les noms de répertoires et un dernier composant à l’aide d’un séparateur propre à la plateforme. Les systèmes POSIX utilisent généralement / ; les chemins Windows emploient souvent \\, et Windows accepte aussi / dans de nombreuses opérations sur les chemins. os.sep fournit le séparateur utilisé par la plateforme actuelle. Pour les opérations courantes, transmettez le chemin à os.path ou utilisez pathlib au lieu de choisir vous-même le séparateur selon la plateforme.
Obtenir un nom de fichier avec os.path.basename
os.path.basename() renvoie le dernier composant d’un chemin. Pour un chemin de fichier, il s’agit généralement du nom du fichier, extension comprise ; cette fonction ne renvoie pas le répertoire. Pour obtenir le nom du dernier répertoire d’un chemin de fichier, récupérez d’abord son parent avec os.path.dirname(), puis transmettez le résultat à os.path.basename().
import os
file_path = "/home/user/documents/report.txt"
filename = os.path.basename(file_path)
parent_directory = os.path.dirname(file_path)
last_directory = os.path.basename(parent_directory)
print(filename)
print(last_directory)
report.txt
documents
Séparer un nom de fichier et son extension avec os.path.splitext
os.path.splitext() sépare l’extension du dernier composant du chemin et renvoie une paire (root, ext). L’extension est vide ou commence par un point ; cette fonction ne renvoie pas de répertoire. Utilisez os.path.dirname() lorsque vous avez besoin du répertoire.
import os
file_path = "/home/user/documents/report.txt"
root, extension = os.path.splitext(file_path)
directory = os.path.dirname(file_path)
print(root)
print(extension)
print(directory)
/home/user/documents/report
.txt
/home/user/documents
Pour un nom de fichier comme archive.tar.gz, splitext() ne sépare que le suffixe final, .gz. La racine renvoyée contient toujours archive.tar ; le traitement des extensions doit donc correspondre à la convention de nommage attendue par votre application.
Obtenir le répertoire d’un chemin de fichier avec os.path.dirname
os.path.dirname() renvoie sous forme de chaîne la partie répertoire d’un chemin. C’est le choix direct lorsque vous disposez déjà d’un chemin sous forme de chaîne et que vous voulez obtenir le répertoire parent de son dernier composant. Aucune cible française disponible n’est répertoriée dans l’inventaire fourni ; le lien pointe donc vers la page API en anglais.
import os
file_path = "/home/user/documents/report.txt"
directory = os.path.dirname(file_path)
print(directory)
/home/user/documents
Utilisez la même variable pour le chemin d’entrée et l’appel de fonction. La fonction traite le texte du chemin ; elle ne vérifie pas si le fichier ou le répertoire existe. Pour créer, lister ou examiner le répertoire, utilisez séparément l’opération appropriée du système de fichiers.
Obtenir un répertoire parent avec pathlib
pathlib fournit des objets Path pour manipuler les chemins. L’attribut Path.parent renvoie le chemin parent sous la forme d’un autre objet Path, ce qui peut être pratique pour enchaîner des opérations sur les chemins ou transmettre ceux-ci à des API acceptant des valeurs de type chemin.
from pathlib import Path
file_path = Path("/home/user/documents/report.txt")
parent_directory = file_path.parent
print(parent_directory)
print(file_path.parts)
/home/user/documents
('/', 'home', 'user', 'documents', 'report.txt')
Path.parts est un tuple contenant les composants du chemin ; c’est un attribut, pas une fonction. Choisissez Path.parent pour obtenir le répertoire parent, et utilisez parts lorsque vous devez examiner ou indexer les composants individuellement.
Résoudre les chemins relatifs et obtenir le répertoire de travail actuel
Un chemin relatif est interprété à partir du répertoire de travail actuel du processus. os.path.abspath() convertit un chemin relatif en chemin absolu en utilisant ce répertoire de travail. Pour obtenir le répertoire contenant le chemin obtenu, transmettez celui-ci à os.path.dirname(). Aucune cible française disponible n’est répertoriée dans l’inventaire fourni pour cette page API ; le lien pointe donc vers la page en anglais.
import os
relative_path = "documents/report.txt"
absolute_path = os.path.abspath(relative_path)
file_directory = os.path.dirname(absolute_path)
print(absolute_path)
print(file_directory)
/work/documents/report.txt
/work/documents
Path.cwd() renvoie le répertoire de travail actuel sous forme d’objet Path, tandis que os.getcwd() le renvoie sous forme de chaîne. Ces méthodes décrivent le répertoire de travail du processus, qui peut différer du répertoire contenant le script Python. Utilisez-les pour déterminer le point de départ des chemins relatifs ; dans un script, utilisez Path(__file__).parent pour obtenir le répertoire contenant ce script.
import os
from pathlib import Path
print(Path.cwd())
print(os.getcwd())
/work
/work