logo oujood
🔍

Manipuler les chemins de fichiers avec pathlib

Le module pathlib remplace os.path depuis Python 3.4. Il traite les chemins comme des objets avec des méthodes claires, et fonctionne sur Windows, Mac et Linux.

OUJOOD.COM

Avant pathlib, manipuler des chemins de fichiers en Python passait par le module os.path : des fonctions comme os.path.join(), os.path.exists(), os.path.dirname()… Le code fonctionnait, mais il était verbeux et peu intuitif.

Depuis Python 3.4, le module pathlib propose une approche différente : un chemin est un objet de type Path, avec ses propres méthodes. On écrit chemin.exists() au lieu de os.path.exists(chemin), chemin.read_text() au lieu de plusieurs lignes avec open(). Le code devient plus court, plus lisible, et fonctionne sans modification sur Windows, Mac et Linux.

Importer et créer un chemin

Tout commence par l'import de Path depuis pathlib. On crée ensuite un objet chemin en passant une chaîne à Path().

  📋 Copier le code

from pathlib import Path

# Chemin relatif
p = Path("dossier/fichier.txt")
print(p)
# Résultat : dossier/fichier.txt

# Chemin absolu vers le répertoire courant
dossier_courant = Path.cwd()
print(dossier_courant)
# Résultat : /home/utilisateur/monprojet (ou C:\Users\... sur Windows)

# Répertoire personnel de l'utilisateur
home = Path.home()
print(home)
# Résultat : /home/utilisateur

Construire des chemins avec /

L'opérateur / permet d'assembler des parties de chemin. C'est le remplacement direct de os.path.join() — et beaucoup plus lisible.

  📋 Copier le code

from pathlib import Path

base = Path("/home/utilisateur/projets")

# Construire un chemin avec l'opérateur /
fichier = base / "monapp" / "config.json"
print(fichier)
# Résultat : /home/utilisateur/projets/monapp/config.json

# Équivalent avec os.path (ancien style)
# import os
# os.path.join("/home/utilisateur/projets", "monapp", "config.json")

Inspecter un chemin

Un objet Path expose plusieurs attributs pour décomposer le chemin sans manipulation de chaînes.

  📋 Copier le code

from pathlib import Path

p = Path("/home/utilisateur/projets/rapport.final.pdf")

print(p.name)        # rapport.final.pdf  (nom complet)
print(p.stem)        # rapport.final      (nom sans dernière extension)
print(p.suffix)      # .pdf               (dernière extension)
print(p.suffixes)    # ['.final', '.pdf']  (toutes les extensions)
print(p.parent)      # /home/utilisateur/projets
print(p.parts)       # ('/', 'home', 'utilisateur', 'projets', 'rapport.final.pdf')

Tester l'existence et la nature d'un chemin

Avant de lire ou d'écrire un fichier, il est souvent utile de vérifier qu'il existe et qu'il est bien du bon type.

  📋 Copier le code

from pathlib import Path

p = Path("config.json")

print(p.exists())    # True si le fichier ou dossier existe
print(p.is_file())   # True si c'est un fichier
print(p.is_dir())    # True si c'est un dossier

# Utilisation dans une condition
if p.exists():
    print("Le fichier est présent.")
else:
    print("Fichier introuvable.")

Lire et écrire un fichier

pathlib propose des méthodes directes pour lire et écrire du texte ou des données binaires, sans passer par open() manuellement.

  📋 Copier le code

from pathlib import Path

p = Path("notes.txt")

# Écrire du texte (crée ou écrase le fichier)
p.write_text("Ligne 1\nLigne 2\nLigne 3", encoding="utf-8")

# Lire tout le contenu d'un coup
contenu = p.read_text(encoding="utf-8")
print(contenu)
# Résultat :
# Ligne 1
# Ligne 2
# Ligne 3

# Lire les lignes une par une
for ligne in p.read_text(encoding="utf-8").splitlines():
    print(ligne)

Pour des fichiers volumineux ou des opérations plus fines (append, lecture partielle), utilisez open() classiquement — pathlib s'y intègre parfaitement : with p.open("a") as f:.

Créer des dossiers

mkdir() crée un dossier. Le paramètre parents=True crée tous les dossiers intermédiaires manquants, et exist_ok=True évite une erreur si le dossier existe déjà.

  📋 Copier le code

from pathlib import Path

# Créer un dossier simple
Path("logs").mkdir(exist_ok=True)

# Créer une arborescence complète
Path("projets/monapp/static/css").mkdir(parents=True, exist_ok=True)

print("Dossiers créés.")

Lister les fichiers d'un dossier

iterdir() liste le contenu immédiat d'un dossier. glob() filtre par motif, et rglob() cherche récursivement dans les sous-dossiers.

  📋 Copier le code

from pathlib import Path

dossier = Path(".")

# Lister tout le contenu du dossier courant
for element in dossier.iterdir():
    print(element.name, "→ dossier" if element.is_dir() else "→ fichier")

# Lister uniquement les fichiers .txt
for fichier_txt in dossier.glob("*.txt"):
    print(fichier_txt.name)

# Chercher tous les .py dans tous les sous-dossiers
for script in dossier.rglob("*.py"):
    print(script)

Renommer et supprimer

  📋 Copier le code

from pathlib import Path

p = Path("ancien_nom.txt")
p.write_text("contenu test", encoding="utf-8")

# Renommer un fichier
nouveau = p.rename("nouveau_nom.txt")
print(nouveau)
# Résultat : nouveau_nom.txt

# Supprimer un fichier
nouveau.unlink()
print("Fichier supprimé.")

# Supprimer un dossier vide
Path("dossier_vide").mkdir(exist_ok=True)
Path("dossier_vide").rmdir()

Changer l'extension d'un fichier

with_suffix() retourne un nouveau chemin avec l'extension remplacée. Utile pour générer le nom d'un fichier de sortie à partir d'un fichier d'entrée.

  📋 Copier le code

from pathlib import Path

source = Path("rapport.docx")

# Générer le nom du fichier PDF correspondant
destination = source.with_suffix(".pdf")
print(destination)
# Résultat : rapport.pdf

# Changer le nom sans changer l'extension
sauvegarde = source.with_stem("rapport_v2")
print(sauvegarde)
# Résultat : rapport_v2.docx (Python 3.9+)

Par carabde | Mis à jour le 21 avril 2026