Cours complet : pathlib en Python
1. Introduction
Avant pathlib , on manipulait les chemins de fichiers avec des chaînes de caractères et le
module [Link] :
python
import os
chemin = [Link]("dossier", "sous-dossier", "[Link]")
C'est fonctionnel mais peu lisible. Depuis Python 3.4, le module pathlib offre une
approche orientée objet, plus claire et plus puissante.
python
from pathlib import Path
chemin = Path("dossier") / "sous-dossier" / "[Link]"
2. Importer et créer un chemin
python
from pathlib import Path
# Chemin relatif
p = Path("dossier/[Link]")
# Chemin absolu
p = Path("/home/user/documents/[Link]")
# Répertoire courant
p = Path(".")
# Répertoire home de l'utilisateur
p = [Link]() # ex: /home/user
p = [Link]() # répertoire de travail actuel
3. Construire des chemins avec /
L'opérateur / permet de combiner des chemins de façon lisible :
python
from pathlib import Path
base = Path("/home/user")
fichier = base / "documents" / "[Link]"
print(fichier) # /home/user/documents/[Link]
C'est l'équivalent de [Link]() , mais beaucoup plus propre.
4. Informations sur un chemin
python
from pathlib import Path
p = Path("/home/user/documents/[Link]")
print([Link]) # [Link] (nom du fichier avec extension)
print([Link]) # notes (nom sans extension)
print([Link]) # .txt (extension)
print([Link]) # /home/user/documents (dossier parent)
print([Link]) # ('/', 'home', 'user', 'documents', '[Link]')
# Plusieurs extensions
p2 = Path("[Link]")
print([Link]) # .gz
print([Link]) # ['.tar', '.gz']
5. Vérifier l'existence et le type
python
from pathlib import Path
p = Path("/home/user/documents")
[Link]() # True si le chemin existe
p.is_file() # True si c'est un fichier
p.is_dir() # True si c'est un dossier
p.is_symlink() # True si c'est un lien symbolique
Exemple pratique :
python
p = Path("[Link]")
if [Link]():
print("Le fichier existe")
else:
print("Fichier introuvable")
6. Lire et écrire des fichiers
pathlib permet de lire et écrire des fichiers directement, sans open() :
python
from pathlib import Path
p = Path("[Link]")
# Écrire
p.write_text("Bonjour le monde")
# Lire
contenu = p.read_text()
print(contenu) # Bonjour le monde
# Lire en bytes (pour les fichiers binaires)
data = p.read_bytes()
# Écrire en bytes
p.write_bytes(b"\x00\x01\x02")
write_text() écrase le fichier s'il existe déjà.
Pour ajouter du contenu sans écraser :
python
with [Link]("a") as f:
[Link]("nouvelle ligne\n")
7. Créer des dossiers
python
from pathlib import Path
# Créer un dossier
Path("nouveau_dossier").mkdir()
# Créer avec les parents (équivalent de mkdir -p)
Path("a/b/c").mkdir(parents=True, exist_ok=True)
# parents=True → crée les dossiers parents si nécessaire
# exist_ok=True → ne génère pas d'erreur si le dossier existe déjà
8. Lister le contenu d'un dossier
python
from pathlib import Path
dossier = Path("/home/user/documents")
# Lister tous les éléments (fichiers + dossiers)
for element in [Link]():
print(element)
# Filtrer uniquement les fichiers
for element in [Link]():
if element.is_file():
print([Link])
9. Rechercher des fichiers avec glob()
glob() permet de chercher des fichiers avec des patterns (motifs) :
python
from pathlib import Path
dossier = Path(".")
# Tous les fichiers .txt dans le dossier courant
for f in [Link]("*.txt"):
print(f)
# Tous les fichiers .py dans tous les sous-dossiers (récursif)
for f in [Link]("*.py"):
print(f)
Pattern Signification
*.txt Tous les fichiers .txt
**/*.py Tous les .py dans tous les sous-dossiers
data_*.csv Fichiers commençant par data_
10. Renommer, déplacer, supprimer
python
from pathlib import Path
p = Path("ancien_nom.txt")
# Renommer / déplacer
[Link]("nouveau_nom.txt")
[Link]("/autre/dossier/[Link]")
# Supprimer un fichier
[Link]()
# Supprimer un dossier vide
Path("dossier_vide").rmdir()
# Supprimer un dossier et tout son contenu
import shutil
[Link]("dossier_avec_contenu")
11. Obtenir le chemin absolu
python
from pathlib import Path
p = Path("[Link]")
print([Link]()) # /home/user/projet/[Link] (chemin absolu complet)
12. Comparaison : [Link] vs pathlib
Tâche [Link] pathlib
Joindre des chemins [Link](a, b) Path(a) / b
Nom du fichier [Link](p) [Link]
Dossier parent [Link](p) [Link]
Extension [Link](p)[1] [Link]
Existe ? [Link](p) [Link]()
Est un fichier ? [Link](p) p.is_file()
Est un dossier ? [Link](p) p.is_dir()
Chemin absolu [Link](p) [Link]()
13. Exemple complet
python
from pathlib import Path
# Dossier de travail
base = Path("projet")
[Link](exist_ok=True)
# Créer des fichiers
(base / "[Link]").write_text("Mes notes")
(base / "[Link]").write_text("debug=True")
# Lister tous les fichiers .txt
print("Fichiers trouvés :")
for f in [Link]("*.txt"):
print(f" - {[Link]} ({[Link]().st_size} octets)")
# Lire un fichier
contenu = (base / "[Link]").read_text()
print(f"\nContenu de [Link] : {contenu}")
# Renommer
(base / "[Link]").rename(base / "notes_v2.txt")
# Vérifier
print(f"\[Link] existe : {(base / '[Link]').exists()}")
print(f"notes_v2.txt existe : {(base / 'notes_v2.txt').exists()}")
14. Résumé des méthodes principales
Méthode / Attribut Description
Path("chemin") Créer un objet Path
p / "sous" Joindre des chemins
[Link] Nom du fichier avec extension
[Link] Nom sans extension
[Link] Extension ( .txt )
[Link] Dossier parent
[Link]() Vérifie l'existence
p.is_file() Vérifie si c'est un fichier
p.is_dir() Vérifie si c'est un dossier
p.read_text() Lire le contenu texte
p.write_text() Écrire du texte
[Link]() Créer un dossier
[Link]() Lister un dossier
[Link]("*.txt") Chercher des fichiers
[Link]("*.py") Chercher récursivement
[Link]() Renommer / déplacer
[Link]() Supprimer un fichier
[Link]() Chemin absolu complet
[Link]() Répertoire home
[Link]() Répertoire courant
Fin du cours — pathlib en Python