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