ComparaisonComparaisons

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 /.

Sur cette page

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, os reste nécessaire
  • Usage typique

    os
    Code plus ancien, variables d’environnement
    pathlib
    Code neuf qui manipule des chemins et des fichiers

Exemple

#
Python
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ésultatrésultat enregistré, vous pouvez le vérifier
cours/python/lecon_01.py
cours/python/lecon_01.py
lecon_01.py lecon_01.py

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

#
Syntaxe
import os
os.path.join("a", "b.txt")

from pathlib import Path
Path("a") / "b.txt"

Plus d’exemples

#
Extension et dossier parent
Python
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))
Résultatrésultat enregistré, vous pouvez le vérifier
.md projet
.md projet
Lecture et écriture de fichier : open() et les méthodes de Path
Python
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")
Résultatrésultat enregistré, vous pouvez le vérifier
Boucle for
Boucle for

Bonnes pratiques

#
  • Ne concaténez pas les chemins avec l’opérateur + et des barres obliques écrites en dur. os.path.join() ou pathlib inséreront le séparateur adapté au système.
  • Vous pouvez passer un objet Path directement à open() et à la plupart des fonctions qui acceptent un chemin. Convertissez-le en chaîne avec str().
  • 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é par os ou par pathlib.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.