Comment gérer les chemins de fichier et repertoire en Python comme un pro avec pathlib

By jefcolbi on November 07, 2025
Reading time: 7 minutes

Comment gérer les chemins de fichier et repertoire en Python comme un pro avec pathlib

Bonjour le monde!

Vous voulez découvrir comment gérer les chemins de fichier et de repertoire, en gros l'accès au système de fichier, dans votre code Python? Alors ce tuto est pour vous.

Table des matières

Introduction

Les chemins dans les systèmes de fichiers seraient plus faciles à manipuler si on avait qu'un système universel. Linux. Ou bien si Windows suivait les memes conventions que Linux. Mais hélas ce n'est pas le cas. Normalement Python est un language cross-platform, nous devrions être capable d'ecrire du code qui marche dans les systèmes supportés sans trop de changement. Mais lorsqu'il s'agit d'écrire des programmes qui manipulent les chemins des systèmes de fichier la tâche devenait très ardue avant. Mais depuis le module pathlib a été introduit dans la standard lib. Néanmoins il reste sous utilisé voir méconnu. Nous allons le découvrir dans cet article.

I - Le problème!

Pour mieux utiliser la solution il faut connaitre, voir comprendre, le problème. Imaginez que vous ecriviez un programme qui demande à l'utilisateur d'entrer un chemin de repertoire et vous allez en déduire la liste de ses ancestres (parents). Vous ecrivez un code comme ceci

chemin = input("Entrer le chemin vers votre repertoire")
# on eclate le chemin avec le separateur '/'
ancetres = chemin.split('/')
print(ancetres)

Vous êtes sur linux tout marche bien. Et puis un utilisateur de votre programme l'execute sur windows et là boom ça ne marche plus. Pourquoi? Simplement parce que '/' n'est pas le separateur de chemin sur windows. Làbas on utilise plutot ''. Notez que dans certains cas on utilisera plutot ''x2 comme séparateur. Je me passe du pourquoi. Vous allez donc modifier votre code comme suit:

import sys

chemin = input("Entrer le chemin vers votre repertoire")
# on eclate le chemin avec le separateur '/'
if sys.platform == "win32":
    ancetres = chemin.split('\\')
else:
    ancetres = chemin.split('/')
print(ancesres)

A ce niveau votre code va bien marcher. Mais imaginez un peut que vous devez faire celà à 20 endroits supplementaires. Et que vous ayez besoin des fonctions comme la relation d'un chemin par rapport à un autres, la création de l'arborescense. Ça va devenir vraiment compliqué.

II - Une solution plus élégante

Reprenons notre problème précedent et resolvons le plus élégamment avec style 😎

from pathlib import Path

chemin = input("Entrer le chemin vers votre repertoire")
obj_chemin = Path(chemin) # on crée un objet de type Path

ancetres = list(reversed(obj_chemin.parents))
print(ancetres)

Pour explication:

  1. on importe pathlib
  2. on recupere le chemin en chaine
  3. on crée un objet Path
  4. on recupere les parents et on renverse l'ordre parce qu'ils sont retournés du parent direct à la racine. Notez aussi que la liste resultante contient des objets de type Path aussi.

III - Petit tour des fonctions disponibles

Alors, pathlib a été conçu pour facilter le travail avec le system de fichiers. Nous avons vu comment obtenir la liste des parents maintenant voyons voir d'autres fonctionnalités

a. liste des fichiers contenus dans un repertoire

Pour lister les fichiers contenus dans un repertoire il suffit de faire:

from pathlib import Path
home = Path('/home/username/')
for p in home.iterdir():
    print(p)

b. Liste récursive des fichiers contenus dans un répertoire

Cette fonctionnalité permet d'avoir la liste des fichiers contenus directement dans le repertoire et les sous-repertoires. Un equivalent du penible os.walk()

from pathlib import Path
home = Path('/home/username/')
for p in home.glob('**/*'):
    print(p)

c. Chemin relatif entre deux chemins

Supposons que vous ayez deux chemins a et b. Vous voulez connaitre le chemin qui existe entre a et b. Par exemple si a = /home/jefcolbi/Images et b = /home/jefcolbi/Images/articles/python/pathlib.png et vous voulez obtenir articles/python/pathlib.png ou bien articles/python/ (chemin strict), vous faites juste comme ceci

from pathlib import Path
a = Path('/home/jefcolbi/Images')
b = Path("/home/jefcolbi/Images/articles/python/pathlib.png")
c = b.relative_to(a)
print(f"le chemin inclusif est {c}")
print(f"le chemin strict est {c.parent}")

IV - Explications d'implementation

Les developpeurs de pathlib ont fait des choix d'implementation assez judicieux qui font du module un succès.

  • l'heritage. On a un heritage en apparence complexe mais assez simple. on a des classes mères PurePath, PureWindowsPath et PurePosixPath et des classes filles Path, WindowsPath et PosixPath.
  • Les Pure*Paths donnent accès à la manipulation des chemins sans accéder au systeme de fichiers. Tandis que les *Paths le font.
  • presque toutes les methodes de Path retourne un object Path. Ceci permet par exemple d'enchainer les opérations. Path('/home/jefcolbi') / "Projects" / "zouktil" donne le même résultat que Path("/home/jefcolbi/Projects/zouktil")

Epilogue

Malgré que ce module ait été ajouté dans la libraire standard il n'est pas beaucoup utilisé. En effet beaucoup de developpeurs ne semblent pas être au courant de son existence et préferent gérer avec le bon vieux os.path. Même dans les grands projets open source, os.path semble encore être utilisé aux depends de pathlib. J'espère neanmoins qu'avec cet article vous utiliserez désormais pathlib pour gerer l'accès au système de fichiers. Une question? Un ajout? Une correction? N'hésitez pas à laisser un commentaire

Réferences:

Comments (0)

-- Signin to comment --

No comments yet. Be the first to comment!