Maîtriser le système de fichiers et l'environnement OS en Python : pathlib vs os

Série 02 – Manipuler dossiers et fichiers en Python

Lors de la création d'un programme, il est indispensable de créer des fichiers, déplacer des dossiers et vérifier des chemins. En Python, deux « solutions » existent. Le module pathlib pour une manipulation élégante des chemins, et le module os qui contrôle l'environnement OS dans lequel le programme s'exécute.

Rencontre entre mécanique et numérique

pathlib est la star de la manipulation de chemins, tandis que os est le directeur de scène qui gère éclairage, sonorisation et accès. Plutôt que d'abandonner l'un, il vaut mieux les utiliser ensemble selon leurs rôles.


1. os et pathlib, quelles différences ?



Depuis Python 3.4, pathlib a grandement amélioré la gestion des chemins.

  • os / os.path
  • Traite les chemins comme des chaînes.
  • Style fonctionnel : os.path.join(), basename(), splitext()
  • Gère également les fonctions OS (variables d'environnement, processus, permissions, etc.).

  • pathlib

  • Traite les chemins comme des objets Path.
  • Opérateur / et chaînage de méthodes rendent le code plus court et intuitif.
  • Idéal pour la navigation et la gestion d'extensions.

2. Comparaison de code par tâche

2.1 Vérifier le répertoire courant et créer un dossier

import os
from pathlib import Path

# Méthode os
current_os = os.getcwd()
if not os.path.exists("test_os"):
    os.makedirs("test_os")

# Méthode pathlib
current_pl = Path.cwd()
Path("test_pl").mkdir(exist_ok=True)

Astuce : pathlib facilite la maintenance, en rendant le code plus lisible.


2.2 Concaténer des chemins (là où la différence est la plus marquée)

import os
from pathlib import Path

# Méthode os
path_os = os.path.join("usr", "bin", "python")

# Méthode pathlib (opérateur slash)
path_pl = Path("usr") / "bin" / "python"

Plus la concaténation est longue, plus pathlib est lisible.


3. Pourquoi privilégier pathlib : la puissance de l'objet chemin



Les avantages de pathlib ne s'arrêtent pas à la concaténation. Dès que vous extrayez des informations sur un fichier, la différence devient plus nette.

Fonction os.path pathlib
Extraire le nom du fichier os.path.basename(p) p.name
Nom sans extension os.path.splitext(os.path.basename(p))[0] p.stem
Extension os.path.splitext(p)[1] p.suffix
Répertoire parent os.path.dirname(p) p.parent

Ces petites différences s'accumulent, et unifier le code autour de pathlib rend le projet plus propre.


4. Exemple concret : trouver tous les fichiers .txt

from pathlib import Path

base_path = Path.cwd()
txt_files = list(base_path.rglob("*.txt"))  # Recherche récursive

for file in txt_files:
    print(f"Nom : {file.name}, Chemin absolu : {file.resolve()}")

Avec rglob(), la recherche récursive s'effectue en un seul appel. pathlib excelle vraiment pour la recherche de fichiers.


5. Quand os est indispensable : le contrôle de l'environnement OS

C'est ici que l'équilibre se révèle. pathlib est un expert des chemins, mais l'OS lui-même est géré par os.

5.1 Lire/écrire des variables d'environnement

Les environnements de développement et de production diffèrent souvent. Les paramètres sont alors stockés dans des variables d'environnement.

import os

# Lecture
url_db = os.environ.get("DATABASE_URL", "sqlite:///local.db")

# Écriture (généralement limitée au processus courant)
os.environ["APP_ENV"] = "production"

Exemples : clés API, mode d'exécution, niveau de log, feature flags…


5.2 Exécuter des processus externes

Lancer des commandes externes ou gérer des processus relève de l'OS. os fournit une interface bas niveau, mais subprocess est souvent préféré.

import os

# Exécution simple (code de retour)
exit_code = os.system("echo hello")
print(exit_code)

Des fonctions plus fines (fork, exec, etc.) se trouvent également dans os.


5.3 Gérer permissions, utilisateurs, répertoire de travail

  • Changer les permissions (Unix) : os.chmod()
  • Changer le répertoire de travail : os.chdir()
  • Informations sur le processus/ l'utilisateur : os.getpid() etc.

Ces fonctionnalités ne sont pas remplacées par pathlib. C'est là que os excelle.


6. Conclusion : répartir les rôles entre pathlib et os

  • Manipulation de chemins / exploration de fichierspathlib est plus lisible et maintenable.
  • Variables d'environnement / processus / permissions / fonctions OSos est le domaine.

Le meilleur schéma est simple :

  • « Tout ce qui concerne les chemins, on le fait avec Path »
  • « Quand on doit parler à l'OS, on utilise os »

7. Résumé

  • pathlib améliore considérablement la lisibilité et la fiabilité du code de gestion de fichiers.
  • os contrôle l'environnement OS complet du programme Python.
  • La solution optimale est pathlib + os.

En une phrase : travaillez les chemins avec pathlib, gérez l'environnement OS avec os.


Articles connexes :