os vs pathlib
os représente les chemins comme de simples chaînes manipulées par des fonctions ; pathlib représente un chemin comme un objet Path avec méthodes et l’opérateur /.
Comparaison point par point
#Représentation du chemin
- os
- Simple chaîne
- pathlib
- Objet de la classe
Path
Combinaison des parties du chemin
- os
os.path.join(a, b)- pathlib
- Opérateur
/:a / b
Nom du fichier et extension
- os
- Fonctions
os.path.basename(),os.path.splitext() - pathlib
- Attributs
.name,.stem,.suffix
Lecture et écriture de fichier
- os
- Via le
open()natif - pathlib
- Méthodes
.read_text(),.write_text()
Variables d’environnement
- os
os.environ- pathlib
- Aucune,
osreste nécessaire
Usage typique
- os
- Code plus ancien, variables d’environnement
- pathlib
- Code neuf qui manipule des chemins et des fichiers
Exemple
#import os
from pathlib import Path
os_path = os.path.join("cours", "python", "lecon_01.py")
path_obj = Path("cours") / "python" / "lecon_01.py"
print(os_path)
print(path_obj)
print(os.path.basename(os_path), path_obj.name)Résultat pour Linux et macOS. Sous Windows, les deux chemins s’afficheraient avec des barres obliques inversées.
Définition et utilisation
#Les deux servent aux mêmes tâches : construire des chemins indépendamment du système d’exploitation, vérifier qu’un fichier existe, lire le nom d’un fichier ou son extension. Les deux fonctionnent correctement sur Windows, Linux et macOS, car elles choisissent elles-mêmes le bon séparateur.
Elles diffèrent par leur style. Dans os.path, un chemin est une simple chaîne, et les opérations sont des fonctions séparées qui la reçoivent et la renvoient : os.path.join(a, b), os.path.basename(path). Dans pathlib, un chemin est un objet de la classe Path, vous combinez ses parties avec l’opérateur /, et vous lisez ses caractéristiques comme des attributs : path.name, path.suffix. Les opérations sur les fichiers, comme la lecture ou l’écriture, sont des méthodes du même objet dans pathlib, alors qu’elles sont réparties entre os et le open() natif dans os.
Dans le code neuf, pathlib est recommandé : il est plus lisible et orienté objet, et une seule variable Path porte avec elle toutes les opérations. Le module os reste nécessaire pour ce que pathlib ne fait pas, par ex. les variables d’environnement (os.environ), et vous le rencontrerez dans du code plus ancien.
Syntaxe
#import os
os.path.join("a", "b.txt")
from pathlib import Path
Path("a") / "b.txt"Plus d’exemples
#from pathlib import Path
import os
path_obj = Path("projet") / "notes.md"
os_path = os.path.join("projet", "notes.md")
print(path_obj.suffix, path_obj.parent)
print(os.path.splitext(os_path)[1], os.path.dirname(os_path))import os
from pathlib import Path
notes = Path("notes_pathlib.txt")
notes.write_text("Boucle for\n", encoding="utf-8")
print(notes.read_text(encoding="utf-8").strip())
notes.unlink()
with open("notes_os.txt", "w", encoding="utf-8") as file:
file.write("Boucle for\n")
with open("notes_os.txt", encoding="utf-8") as file:
print(file.read().strip())
os.remove("notes_os.txt")Bonnes pratiques
#- Ne concaténez pas les chemins avec l’opérateur
+et des barres obliques écrites en dur.os.path.join()oupathlibinséreront le séparateur adapté au système. - Vous pouvez passer un objet
Pathdirectement àopen()et à la plupart des fonctions qui acceptent un chemin. Convertissez-le en chaîne avecstr(). - Gardez les mots de passe et les clés API dans des variables d’environnement et lisez-les via
os.environ.get(), que le reste des chemins soit géré parosou parpathlib.
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.