Créer un dossier Python robuste - La méthode pro expliquée

Noël Besnard .

17 mai 2026

Icônes illustrant les bonnes pratiques de développement en Python, comme nommer clairement, documenter, organiser, tester, utiliser Git, simplifier, gérer les erreurs et automatiser. Le logo Python apparaît sur un ordinateur portable.

Créer un dossier en Python paraît simple, mais la méthode choisie change vite dès qu’un script doit fonctionner sur plusieurs machines, gérer des chemins imbriqués ou rester stable si le répertoire existe déjà. Je vais te montrer les approches les plus fiables avec pathlib et os, puis les cas concrets qui comptent vraiment quand on automatise un export, un projet de données ou un petit outil interne. L’idée est d’aller droit au code, sans perdre les nuances qui évitent les bugs inutiles.

Les points essentiels à retenir avant d’écrire le code

  • pathlib.Path.mkdir() est la solution la plus lisible pour du code moderne.
  • parents=True crée aussi les dossiers intermédiaires manquants.
  • exist_ok=True évite l’erreur si le dossier existe déjà.
  • os.makedirs() reste utile dans du code ancien ou quand tu manipules déjà des chemins en chaînes.
  • Une simple vérification avec exists() ne suffit pas toujours à sécuriser un script.

Script Python pour créer des dossiers imbriqués. La fonction `create_directories` utilise `os.makedirs` pour créer des répertoires à partir d'une liste de chemins.

Les deux méthodes que je privilégie

Pour créer un répertoire, je pars presque toujours sur pathlib. La lecture du code est meilleure, les chemins sont plus faciles à composer, et l’ensemble s’intègre bien avec les autres opérations sur les fichiers. La documentation officielle de Python précise que Path.mkdir() crée un nouveau dossier et que parents=True reproduit le comportement de mkdir -p en créant les dossiers intermédiaires manquants.

En face, os.makedirs() fait très bien le travail, surtout si ton code manipule déjà des chaînes ou s’appuie beaucoup sur le module os. Je le garde volontiers pour les scripts courts ou pour maintenir un vieux projet, mais pour un nouveau code je préfère la version objet de pathlib.

from pathlib import Path

Path("rapports").mkdir()

Cette version crée un dossier simple dans le répertoire courant. Si le chemin doit traverser plusieurs niveaux, j’utilise une forme explicite :

from pathlib import Path

Path("exports/clients/2026").mkdir(parents=True, exist_ok=True)

Avec os, l’équivalent est correct, mais moins fluide à lire quand le script grandit :

import os

os.makedirs("exports/clients/2026", exist_ok=True)

La vraie différence n’est pas la puissance brute. Elle est dans la lisibilité et dans la façon dont ce code va s’enchaîner avec le reste du projet. C’est ce qui permet ensuite de choisir proprement l’outil adapté au contexte.

Choisir entre pathlib et os selon le contexte

Je ne conseille pas le même outil dans tous les cas. Le bon choix dépend surtout de la taille du script, de l’existant et du niveau de clarté que tu veux garder dans six mois. Quand on écrit du code destiné à durer, ce détail compte plus qu’il n’y paraît.

Critère pathlib.Path.mkdir() os.makedirs()
Lisibilité Très bonne, surtout avec les opérateurs / pour composer les chemins Correcte, mais plus verbeuse quand les chemins se multiplient
Code neuf Mon premier choix Possible, mais rarement nécessaire
Projet existant Bon choix si tu peux moderniser progressivement Pratique si tout le code repose déjà sur os
Chemins imbriqués Très simple avec parents=True Très simple avec exist_ok=True
Style général Plus moderne et plus cohérent avec le reste de l’API fichier Plus procédural, donc parfois plus direct dans un script minimal

En pratique, je choisis pathlib dès que je contrôle le code source. Je reviens à os surtout quand je dois m’aligner sur un code déjà établi, pas par préférence technique. Une fois ce choix posé, le vrai sujet devient la gestion des chemins déjà présents et des erreurs usuelles.

Gérer les dossiers parents et les erreurs sans improviser

Le point le plus utile, en production, c’est souvent parents=True et exist_ok=True. Sans eux, un simple dossier intermédiaire manquant peut casser tout le script. Avec eux, le code devient plus idempotent, c’est-à-dire capable de s’exécuter plusieurs fois sans provoquer d’échec inutile quand le répertoire cible existe déjà.

Je fais aussi attention au comportement réel de exist_ok=True. La documentation officielle rappelle que l’option évite l’erreur si le dossier est déjà là, mais elle ne transforme pas un fichier en dossier. Si un chemin existant pointe vers autre chose qu’un répertoire, l’exception reste normale, et c’est préférable ainsi.

from pathlib import Path

dossier = Path("logs/app/2026/06")
dossier.mkdir(parents=True, exist_ok=True)

Ce code est robuste pour un pipeline, un export automatique ou un service qui génère des artefacts. Si le dossier existe déjà, il continue sans bruit. Si un élément du chemin manque, il est créé. Si une autorisation bloque l’opération, Python lève une erreur claire qu’il faut gérer au niveau supérieur.

Je garde aussi en tête le paramètre mode, surtout sur Unix. Il est combiné avec le umask du processus, donc la permission effective n’est pas toujours celle que tu imagines en lisant le code. En pratique, je préfère miser sur une politique de droits cohérente au niveau du système plutôt que sur une valeur magique dans chaque script. Le passage suivant montre justement comment j’applique ça sur des cas concrets.

Exemples concrets pour un projet réel

Les exemples les plus utiles ne sont pas les plus spectaculaires. Ce sont ceux qu’on peut reprendre tels quels dans un projet de build, de scraping, de reporting ou d’automatisation interne.

Créer un dossier simple dans le répertoire courant

from pathlib import Path

Path("exports").mkdir(exist_ok=True)

Je pars souvent de ce modèle pour un outil local ou un petit script de préparation. Il est clair, court et facile à maintenir.

Créer une arborescence complète

from pathlib import Path

base = Path("data")
(base / "brut" / "2026" / "06").mkdir(parents=True, exist_ok=True)

Ce format est particulièrement pratique quand le script organise les sorties par lot, par client ou par date. Le chemin se lit comme une intention, pas comme une suite de concaténations fragiles.

Créer un dossier dans le répertoire personnel

from pathlib import Path

dossier = Path.home() / "mes_exports"
dossier.mkdir(exist_ok=True)

Je trouve ce modèle plus propre que d’écrire un chemin absolu en dur. Il s’adapte mieux à la machine de l’utilisateur et évite les surprises liées à l’environnement local.

Lire aussi : π en Python - Le guide complet pour des calculs précis

Travailler avec un chemin relatif au script

from pathlib import Path

racine = Path(__file__).resolve().parent
sortie = racine / "build" / "assets"
sortie.mkdir(parents=True, exist_ok=True)

Ce cas est très utile pour les projets de déploiement ou les scripts appelés depuis différents emplacements. La nuance est importante : le dossier courant n’est pas toujours le dossier du script. Quand on ignore cette différence, on finit vite avec des fichiers créés au mauvais endroit.

Ces exemples couvrent la majorité des usages courants. Le reste, en réalité, concerne surtout les pièges d’exécution et les problèmes d’environnement, qui sont souvent plus coûteux que la ligne de code elle-même.

Les pièges qui cassent un script quand il passe en production

Le premier piège, c’est le répertoire courant. Un script lancé depuis un terminal, un cron, un conteneur ou un IDE ne part pas forcément du même endroit. Si tu écris Path("data") sans réfléchir au contexte, tu peux créer un dossier au mauvais niveau sans même t’en rendre compte.

Le deuxième piège, c’est la vérification préalable avec exists(). Beaucoup de scripts font d’abord un test, puis un mkdir. En pratique, cette logique ouvre une petite fenêtre de course entre les deux opérations. Je préfère souvent laisser mkdir(..., exist_ok=True) faire le travail directement, puis gérer l’exception seulement si elle signifie quelque chose de réel pour le métier.

Le troisième piège concerne les chemins fournis par l’utilisateur. Si tu acceptes un nom de dossier depuis un formulaire, un argument CLI ou une API, il faut contrôler ce qui est autorisé. Un chemin mal validé peut sortir du périmètre prévu, créer une structure inattendue ou provoquer une erreur de permission. Dans les scripts exposés à des entrées externes, je valide toujours la base cible avant d’écrire quoi que ce soit.

Enfin, les contraintes de système restent très concrètes : droits insuffisants, noms réservés sous Windows, dossier déjà verrouillé par un autre processus, ou chemin trop profond. Dans ces cas-là, Python ne fait que signaler le problème. C’est à toi de décider si tu dois réessayer, journaliser l’échec ou arrêter le traitement proprement. C’est ce cadre-là qui rend le code fiable sur la durée.

Ce que je garde en tête pour des scripts vraiment robustes

Quand j’écris un script qui doit durer, je vise d’abord un comportement prévisible. Je crée le dossier au début du traitement, je le fais de manière idempotente, et je garde les chemins sous forme de Path autant que possible. Ce trio simple évite une grande partie des bugs bêtes, surtout dans les scripts d’automatisation et les outils internes.

Je fais aussi un choix de lisibilité assumé : un chemin doit raconter ce que le code va produire. Si je dois relire le script trois mois plus tard, je veux comprendre immédiatement où vont les fichiers, pourquoi le dossier existe, et ce qui se passe s’il est déjà là. C’est exactement pour ça que je privilégie pathlib dans un code neuf.

Si tu veux aller plus loin, la bonne suite logique n’est pas de compliquer la création du dossier, mais d’enchaîner avec la gestion des fichiers, des sous-dossiers et des chemins relatifs au projet. À ce stade, créer un répertoire n’est plus une fin en soi : c’est la première brique d’un flux de fichiers propre et portable.

Questions fréquentes

`pathlib` offre une syntaxe plus moderne et orientée objet, rendant le code plus lisible et intuitif. Il simplifie la manipulation des chemins grâce à des opérateurs comme `/` et s'intègre mieux avec d'autres opérations sur les fichiers, ce qui est idéal pour les nouveaux projets et le code destiné à durer.
`os.makedirs()` reste pertinent pour les scripts courts, la maintenance de code existant qui utilise déjà le module `os`, ou lorsque vous manipulez principalement des chemins sous forme de chaînes de caractères. C'est une option fiable si la modernisation vers `pathlib` n'est pas une priorité.
`parents=True` permet de créer tous les dossiers intermédiaires manquants dans le chemin spécifié, évitant ainsi les erreurs. `exist_ok=True` empêche une erreur si le dossier cible existe déjà, rendant votre script idempotent et plus robuste face aux exécutions multiples sans échec inutile.
Assurez-vous de la robustesse en utilisant `exist_ok=True` pour éviter les erreurs si le dossier existe. Validez toujours les chemins fournis par l'utilisateur pour prévenir les problèmes de sécurité ou de structure. Soyez conscient du répertoire courant du script et des droits d'accès pour éviter les erreurs d'environnement.

Évaluer l'article

Moyenne: 0.0 / 5 · 0 évaluations

Tags

python créer un dossier créer dossier python python créer répertoire pathlib mkdir parents=true
Autor Noël Besnard
Noël Besnard
Je suis Noël Besnard, un analyste de l'industrie passionné par les domaines de la technologie, notamment le web, l'intelligence artificielle, les réseaux et la sécurité. Avec plus de dix ans d'expérience dans l'analyse des tendances du marché technologique, j'ai acquis une expertise approfondie qui me permet d'explorer les innovations et les défis auxquels notre monde numérique est confronté. Mon approche consiste à simplifier des données complexes et à fournir une analyse objective, ce qui me permet de rendre les sujets techniques accessibles à tous. Je m'engage à offrir des informations précises et à jour, en vérifiant rigoureusement les faits pour garantir la fiabilité de chaque article que je publie. Mon objectif est d'aider les lecteurs à naviguer dans cet univers en constante évolution, en leur fournissant les outils nécessaires pour comprendre les enjeux technologiques contemporains.

Commentaires (0)

Ajouter un commentaire