Commencer avec pathlib — Gestion des chemins orientée objet
Lorsque vous travaillez avec Python, il est très courant de traiter des chemins de fichiers ou des répertoires. C'est une tâche quotidienne, comme sauvegarder des logs, lire et écrire des fichiers de configuration ou organiser des fichiers de données. Auparavant, nous devions mélanger différents modules comme os.path
, glob
et shutil
pour gérer ces tâches, mais ce n'est plus nécessaire. Pourquoi donc ?
Parce que nous avons pathlib
.
Qu'est-ce que pathlib ?
pathlib
est un module orienté objet dédié au traitement des chemins qui est apparu à partir de Python 3.4. Auparavant, les chemins de fichiers étaient traités comme de simples chaînes de caractères, tandis que pathlib
les traite comme "des objets représentant des chemins". Cela rend les opérations telles que la connexion de chemins, la vérification de leur existence, ou la lecture et l'écriture de fichiers beaucoup plus claires et lisibles.
from pathlib import Path
▶ Cette classe Path
fonctionne automatiquement avec PosixPath
(macOS/Linux) ou WindowsPath
selon le système d'exploitation. Vous n'avez pas besoin de vous soucier de l'OS que vous utilisez !
Fonctionnalités essentielles et exemples de pathlib
1. Création d'un objet chemin
p = Path('data/example.txt')
print(p.resolve()) # Renvoie le chemin absolu
Bien que cela ressemble à une chaîne, c'est en fait un objet. Vous pouvez gérer le chemin de manière flexible grâce à divers méthodes et attributs.
2. Combinaison de chemins : utilisation de l'opérateur /
data_dir = Path('data')
file_path = data_dir / 'sample.txt'
Le fait de pouvoir combiner des chemins avec l'opérateur /
est très Pythonique. Cela offre plus de lisibilité et de sécurité par rapport à l'addition de chaînes.
3. Extraction d'informations sur le chemin
Il est également très pratique de pouvoir extraire les composantes d'un chemin, comme le répertoire parent, le nom ou l'extension.
p = Path('data/sample.txt')
print(p.parent) # data
print(p.name) # sample.txt
print(p.stem) # sample
print(p.suffix) # .txt
4. Vérification de l'existence
Renvoie un booléen pour savoir si le chemin existe ou non.
p.exists() # Vérification de l'existence
p.is_file() # Est-ce un fichier ?
p.is_dir() # Est-ce un répertoire ?
5. Création de répertoires
p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)
Vous pouvez créer des répertoires imbriqués d'un seul coup, et si le répertoire existe déjà, aucune erreur ne se produira.
6. Lecture et écriture de fichiers
p = Path('output.txt')
p.write_text("Hello, World!")
text = p.read_text()
print(text)
Vous pouvez également gérer des fichiers binaires :
p.write_bytes(b'binary data')
data = p.read_bytes()
7. Recherche de fichiers/répertoires
print(list(Path('.').glob('*.py'))) # Liste des fichiers .py dans le dossier courant
print(list(Path('.').rglob('*.py'))) # Recherche récursive dans les sous-dossiers
glob()
renvoie un générateur, il est donc préférable de le convertir en liste pour le vérifier.
8. Suppression, déplacement, renommage de fichiers
p.unlink() # Suppression
p.rename('newname') # Renommer (dans le même répertoire)
p.replace('newpath') # Déplacer et écraser
rename()
peut échouer si le chemin cible existe, donc si vous avez besoin d'écraser, utilisezreplace()
. Pour les opérations de copie, il est préférable d'utilisershutil.copy()
.
Comparaison entre os.path et pathlib
# os.path
import os
os.path.exists('foo/bar.txt')
# pathlib
Path('foo/bar.txt').exists()
- Le code est beaucoup plus lisible et agréable à lire.
- Surtout, il s'apparente à la structure syntaxique des commandes
cd
,ls
,mkdir
que l'on utilise fréquemment dans les environnements Linux.
Pourquoi devrions-nous utiliser pathlib ?
- Le code devient structuré grâce aux objets Path au lieu de simples chaînes de caractères.
- Traitement des chemins indépendant du système d'exploitation (Windows vs POSIX)
- Intégration des fonctionnalités de
os.path
,glob
, etshutil
- Amélioration de la maintenabilité dans le code de test, les logs, le traitement des erreurs, etc.
Conclusion
Tout comme Counter
et defaultdict
ont apporté une élégance au traitement des collections, pathlib
révolutionne la gestion des chemins de fichiers. L'ancienne époque des manipulations de chaînes compliquées est désormais révolue. Essayez d'exécuter un à un les exemples présentés dans cet article. Vous vous familiariserez beaucoup plus rapidement que prévu.
Dans le prochain article, nous aborderons des méthodes avancées pour automatiser la copie et la sauvegarde de fichiers à l'aide de shutil
. Restez à l'écoute !
Pour consulter l'article précédent, cliquez sur le lien ci-dessous.
Add a New Comment