# 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](/media/editor_temp/6/dde8bc58-b467-4fe2-9370-24899d41a7bd.png) `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 ? {#sec-0edc88f0381b} 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 {#sec-3292d14a8c8b} ### 2.1 Vérifier le répertoire courant et créer un dossier {#sec-003c75cb97fe} ```python 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) {#sec-bd0fb363817f} ```python 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 {#sec-95ff86b13648} 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 {#sec-e8a746fd32a5} ```python 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 {#sec-a3c83f68eefc} 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 {#sec-2adcac95b073} Les environnements de développement et de production diffèrent souvent. Les paramètres sont alors stockés dans des variables d'environnement. ```python 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 {#sec-bb592829f49f} 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é. ```python 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 {#sec-23634541176d} * 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 {#sec-88a385feb202} * **Manipulation de chemins / exploration de fichiers** → `pathlib` est plus lisible et maintenable. * **Variables d'environnement / processus / permissions / fonctions OS** → `os` 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é {#sec-078ee5aac15c} * `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 :** - [[Python Standard Library - 0] Qu'est-ce que la bibliothèque standard Python ? Guide pour débutants](/ko/whitedec/2026/1/29/python-standard-library/) - [[Maîtriser la bibliothèque standard Python 3 - pathlib](/ko/whitedec/2025/5/8/python-standard-library-pathlib/)