- À propos de pathlib et os.path
- Différence de principe entre pathlib et os.path
- Créer et construire des chemins
- Obtenir les différentes parties d'un chemin
- Tester l'existence et le type d'un chemin
- Obtenir un chemin absolu
- Manipuler les noms et extensions des fichiers
- Parcourir les fichiers et dossiers
- Tableau de correspondance entre pathlib et os.path
- À retenir
1. À propos de pathlib et os.path
Python propose principalement deux approches pour manipuler les chemins des fichiers et des dossiers : le module os.path et le module pathlib. Ils permettent tous les deux de construire des chemins, récupérer leurs différentes parties, tester leur existence et effectuer de nombreuses opérations sur le système de fichiers.
os.path représente l'approche historique de Python. Les chemins sont généralement manipulés sous forme de chaînes de caractères et sont passés à différentes fonctions.
pathlib propose une approche orientée objet. Un chemin est représenté par un objet Path possédant directement des propriétés et des méthodes permettant de le manipuler.
Le programme suivant montre la représentation d'un même chemin avec os.path et pathlib.
1 2 3 4 5 6 7 8 | import os from pathlib import Path chemin_os = os.path.join("documents", "python", "cours.txt") chemin_pathlib = Path("documents") / "python" / "cours.txt" print(chemin_os) print(chemin_pathlib) |
Sortie possible :
1 2 | documents\python\cours.txt documents\python\cours.txt |
Le résultat obtenu est comparable, mais la manière de construire et de manipuler le chemin est différente.
2. Différence de principe entre pathlib et os.path
Avec os.path, les opérations sont réalisées en appelant des fonctions auxquelles nous transmettons le chemin. Avec pathlib, les opérations sont généralement réalisées directement sur un objet Path.
Le programme suivant récupère le nom d'un fichier avec os.path.basename().
1 2 3 4 5 6 | import os chemin = "documents/python/cours.txt" nom = os.path.basename(chemin) print(nom) |
Sortie :
1 | cours.txt |
Avec pathlib, le chemin est représenté par un objet Path et le nom du fichier est accessible grâce à la propriété name.
1 2 3 4 5 6 | from pathlib import Path chemin = Path("documents/python/cours.txt") nom = chemin.name print(nom) |
Sortie :
1 | cours.txt |
La principale différence peut donc être résumée ainsi : os.path utilise principalement des fonctions travaillant sur des chemins, tandis que pathlib encapsule le chemin et ses opérations dans des objets.
3. Créer et construire des chemins
Pour construire un chemin avec os.path, nous utilisons généralement la fonction os.path.join(). Elle assemble plusieurs parties en utilisant le séparateur adapté au système d'exploitation.
Le programme suivant construit le chemin d'un fichier avec os.path.join().
1 2 3 4 5 | import os chemin = os.path.join("documents", "python", "cours.txt") print(chemin) |
Sortie possible sous Windows :
1 | documents\python\cours.txt |
Avec pathlib, nous pouvons construire le même chemin avec la classe Path et l'opérateur /.
1 2 3 4 5 | from pathlib import Path chemin = Path("documents") / "python" / "cours.txt" print(chemin) |
Sortie possible sous Windows :
1 | documents\python\cours.txt |
Il est également possible de fournir directement plusieurs éléments au constructeur Path().
1 2 3 4 5 | from pathlib import Path chemin = Path("documents", "python", "cours.txt") print(chemin) |
Sortie possible sous Windows :
1 | documents\python\cours.txt |
4. Obtenir les différentes parties d'un chemin
os.path fournit plusieurs fonctions permettant d'extraire les différentes parties d'un chemin. Nous pouvons notamment utiliser basename(), dirname() et splitext().
Le programme suivant récupère le nom du fichier, son dossier et son extension avec os.path.
1 2 3 4 5 6 7 | import os chemin = "documents/python/cours.pdf" print("Nom :", os.path.basename(chemin)) print("Dossier :", os.path.dirname(chemin)) print("Extension :", os.path.splitext(chemin)[1]) |
Sortie :
1 2 3 | Nom : cours.pdf Dossier : documents/python Extension : .pdf |
Avec pathlib, ces informations sont directement disponibles sous forme de propriétés de l'objet Path.
1 2 3 4 5 6 7 8 | from pathlib import Path chemin = Path("documents/python/cours.pdf") print("Nom :", chemin.name) print("Dossier :", chemin.parent) print("Extension :", chemin.suffix) print("Nom sans extension :", chemin.stem) |
Sortie :
1 2 3 4 | Nom : cours.pdf Dossier : documents/python Extension : .pdf Nom sans extension : cours |
5. Tester l'existence et le type d'un chemin
Avec os.path, les fonctions exists(), isfile() et isdir() permettent respectivement de tester l'existence d'un chemin et de déterminer s'il correspond à un fichier ou à un dossier.
Le programme suivant effectue ces trois tests avec os.path.
1 2 3 4 5 6 7 | import os chemin = "documents/cours.txt" print("Existe :", os.path.exists(chemin)) print("Fichier :", os.path.isfile(chemin)) print("Dossier :", os.path.isdir(chemin)) |
Sortie possible :
1 2 3 | Existe : True Fichier : True Dossier : False |
Avec pathlib, nous utilisons les méthodes exists(), is_file() et is_dir() de l'objet Path.
1 2 3 4 5 6 7 | from pathlib import Path chemin = Path("documents/cours.txt") print("Existe :", chemin.exists()) print("Fichier :", chemin.is_file()) print("Dossier :", chemin.is_dir()) |
Sortie possible :
1 2 3 | Existe : True Fichier : True Dossier : False |
6. Obtenir un chemin absolu
Avec os.path, la fonction os.path.abspath() permet de transformer un chemin relatif en chemin absolu en fonction du répertoire de travail courant.
Le programme suivant obtient le chemin absolu de documents/cours.txt.
1 2 3 4 5 6 | import os chemin = "documents/cours.txt" absolu = os.path.abspath(chemin) print(absolu) |
Sortie possible sous Windows :
1 | C:\Users\dell\Python\documents\cours.txt |
Avec pathlib, nous pouvons notamment utiliser la méthode resolve(). Elle retourne un objet Path représentant le chemin absolu résolu.
1 2 3 4 5 6 | from pathlib import Path chemin = Path("documents/cours.txt") absolu = chemin.resolve() print(absolu) |
Sortie possible sous Windows :
1 | C:\Users\dell\Python\documents\cours.txt |
La méthode resolve() permet également de résoudre les éléments tels que .. présents dans un chemin.
1 2 3 4 5 | from pathlib import Path chemin = Path("documents/python/../cours.txt") print(chemin.resolve()) |
Sortie possible :
1 | C:\Users\dell\Python\documents\cours.txt |
7. Manipuler les noms et extensions des fichiers
Avec os.path, la modification d'un nom ou d'une extension nécessite généralement de combiner plusieurs fonctions. Par exemple, splitext() permet de séparer le chemin et son extension.
Le programme suivant remplace l'extension .txt par .pdf avec os.path.
1 2 3 4 5 6 7 | import os chemin = "documents/cours.txt" racine, extension = os.path.splitext(chemin) nouveau = racine + ".pdf" print(nouveau) |
Sortie :
1 | documents/cours.pdf |
Avec pathlib, la méthode with_suffix() permet de construire directement le nouveau chemin.
1 2 3 4 5 6 | from pathlib import Path chemin = Path("documents/cours.txt") nouveau = chemin.with_suffix(".pdf") print(nouveau) |
Sortie :
1 | documents/cours.pdf |
De même, with_name() permet de remplacer facilement le nom du fichier.
1 2 3 4 5 6 | from pathlib import Path chemin = Path("documents/cours.txt") nouveau = chemin.with_name("formation.txt") print(nouveau) |
Sortie :
1 | documents/formation.txt |
8. Parcourir les fichiers et dossiers
Pour parcourir les éléments d'un dossier avec l'approche classique, nous pouvons combiner le module os avec os.path. La fonction os.listdir() retourne les noms des éléments présents dans un dossier.
Le programme suivant affiche les éléments du dossier documents en construisant leur chemin avec os.path.join().
1 2 3 4 5 6 7 | import os dossier = "documents" for nom in os.listdir(dossier): chemin = os.path.join(dossier, nom) print(chemin) |
Sortie possible :
1 2 3 | documents\cours.txt documents\exercices.pdf documents\images |
Avec pathlib, la méthode iterdir() retourne directement des objets Path représentant les éléments du dossier.
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for chemin in dossier.iterdir(): print(chemin) |
Sortie possible :
1 2 3 | documents\cours.txt documents\exercices.pdf documents\images |
Pour rechercher uniquement certains fichiers, pathlib fournit également les méthodes glob() et rglob().
1 2 3 4 5 6 | from pathlib import Path dossier = Path("documents") for fichier in dossier.glob("*.pdf"): print(fichier) |
Sortie possible :
1 2 | documents\exercices.pdf documents\rapport.pdf |
9. Tableau de correspondance entre pathlib et os.path
De nombreuses opérations réalisées avec os.path possèdent un équivalent direct ou proche dans pathlib. Le tableau suivant présente les correspondances les plus courantes.
| Opération | os.path ou os | pathlib |
|---|---|---|
| Construire un chemin | os.path.join() | Path() / "dossier" |
| Nom du fichier | os.path.basename() | Path.name |
| Dossier parent | os.path.dirname() | Path.parent |
| Extension | os.path.splitext() | Path.suffix |
| Tester l'existence | os.path.exists() | Path.exists() |
| Tester un fichier | os.path.isfile() | Path.is_file() |
| Tester un dossier | os.path.isdir() | Path.is_dir() |
| Chemin absolu | os.path.abspath() | Path.absolute() ou Path.resolve() |
| Lister un dossier | os.listdir() | Path.iterdir() |
| Rechercher par motif | glob.glob() | Path.glob() |
| Renommer | os.rename() | Path.rename() |
| Supprimer un fichier | os.remove() | Path.unlink() |
| Supprimer un dossier vide | os.rmdir() | Path.rmdir() |
Le programme suivant illustre une même opération complète avec les deux approches : construire un chemin et vérifier s'il correspond à un fichier.
1 2 3 4 5 6 7 8 | import os from pathlib import Path chemin_os = os.path.join("documents", "cours.txt") chemin_pathlib = Path("documents") / "cours.txt" print("os.path :", os.path.isfile(chemin_os)) print("pathlib :", chemin_pathlib.is_file()) |
Sortie possible :
1 2 | os.path : True pathlib : True |
10. À retenir
os.path et pathlib permettent tous les deux de manipuler efficacement les chemins des fichiers et des dossiers en Python. Ils reposent cependant sur deux styles de programmation différents.
- os.path est l'approche historique de manipulation des chemins en Python.
- os.path travaille principalement avec des chemins représentés sous forme de chaînes ou d'objets compatibles avec le protocole des chemins.
- pathlib propose une approche orientée objet.
- La classe Path regroupe dans un même objet le chemin et de nombreuses opérations associées.
- os.path.join() permet de construire des chemins avec l'approche classique.
- L'opérateur / permet de construire simplement des chemins avec pathlib.
- Path.name, Path.parent, Path.stem et Path.suffix facilitent l'accès aux différentes parties d'un chemin.
- Path.exists(), Path.is_file() et Path.is_dir() permettent d'effectuer directement des tests sur le chemin.
- Path.glob() et Path.rglob() facilitent la recherche de fichiers.
- Pour du nouveau code centré sur la manipulation de chemins, pathlib offre souvent une écriture plus compacte et lisible, tandis que os.path reste utile dans du code existant et avec certaines API.
Le programme suivant compare une dernière fois la construction et l'analyse d'un même chemin avec les deux approches.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import os from pathlib import Path chemin_os = os.path.join("documents", "python", "cours.pdf") chemin_pathlib = Path("documents") / "python" / "cours.pdf" print("Avec os.path") print("Chemin :", chemin_os) print("Nom :", os.path.basename(chemin_os)) print("Extension :", os.path.splitext(chemin_os)[1]) print("Avec pathlib") print("Chemin :", chemin_pathlib) print("Nom :", chemin_pathlib.name) print("Extension :", chemin_pathlib.suffix) |
Sortie possible :
1 2 3 4 5 6 7 8 | Avec os.path Chemin : documents\python\cours.pdf Nom : cours.pdf Extension : .pdf Avec pathlib Chemin : documents\python\cours.pdf Nom : cours.pdf Extension : .pdf |
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


