pathlib ou os.path : lequel utiliser en Python ?

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.

Sortie possible :

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().

Sortie :

Avec pathlib, le chemin est représenté par un objet Path et le nom du fichier est accessible grâce à la propriété name.

Sortie :

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().

Sortie possible sous Windows :

Avec pathlib, nous pouvons construire le même chemin avec la classe Path et l'opérateur /.

Sortie possible sous Windows :

Il est également possible de fournir directement plusieurs éléments au constructeur Path().

Sortie possible sous Windows :

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.

Sortie :

Avec pathlib, ces informations sont directement disponibles sous forme de propriétés de l'objet Path.

Sortie :

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.

Sortie possible :

Avec pathlib, nous utilisons les méthodes exists(), is_file() et is_dir() de l'objet Path.

Sortie possible :

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.

Sortie possible sous Windows :

Avec pathlib, nous pouvons notamment utiliser la méthode resolve(). Elle retourne un objet Path représentant le chemin absolu résolu.

Sortie possible sous Windows :

La méthode resolve() permet également de résoudre les éléments tels que .. présents dans un chemin.

Sortie possible :

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.

Sortie :

Avec pathlib, la méthode with_suffix() permet de construire directement le nouveau chemin.

Sortie :

De même, with_name() permet de remplacer facilement le nom du fichier.

Sortie :

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().

Sortie possible :

Avec pathlib, la méthode iterdir() retourne directement des objets Path représentant les éléments du dossier.

Sortie possible :

Pour rechercher uniquement certains fichiers, pathlib fournit également les méthodes glob() et rglob().

Sortie possible :

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érationos.path ou ospathlib
Construire un cheminos.path.join()Path() / "dossier"
Nom du fichieros.path.basename()Path.name
Dossier parentos.path.dirname()Path.parent
Extensionos.path.splitext()Path.suffix
Tester l'existenceos.path.exists()Path.exists()
Tester un fichieros.path.isfile()Path.is_file()
Tester un dossieros.path.isdir()Path.is_dir()
Chemin absoluos.path.abspath()Path.absolute() ou Path.resolve()
Lister un dossieros.listdir()Path.iterdir()
Rechercher par motifglob.glob()Path.glob()
Renommeros.rename()Path.rename()
Supprimer un fichieros.remove()Path.unlink()
Supprimer un dossier videos.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.

Sortie possible :

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.

Sortie possible :

 


 


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/


Leave a Reply

Your email address will not be published. Required fields are marked *