Navigation :

Ce module permet de manipuler simplement des chemins et gérer des répertoires dans votre système d’exploitation.

Un des avantages majeurs est qu’il va gérer seul les symboles de séparation des répertoire / sous Linux et MacOS ou \ sous Windows en fonction de l’OS sur lequel sera exécuté le script Python.

Pour importer le module os :

import os

La fonction os.path.join()

Cette fonction permet de concaténer automatiquement des chemins en fonction de l’OS sur lequel elle s’exécute (inversion des  \ / automatique).
En argument, on lui fait passer les noms des nouveaux répertoires que l’on veut créer.

Exemple :

import os

chemin = "/home/vincent/PythonProjects/B-A-BA"
nouveau_dossier = os.path.join(chemin, "dossier", "sous_dossier")
print(nouveau_dossier)

>>> /home/vincent/PythonProjects/B-A-BA/dossier/sous_dossier

La fonction os.mkdir()

Permet de créer un seul répertoire, pas de possibilité de créer des sous-répertories :

import os

chemin = "/home/vincent/PythonProjects/B-A-BA"
dossier = os.path.join(chemin,"nouveau_dossier")
os.mkdir(dossier)

Crée un répertoire :

/home/vincent/PythonProjects/B-A-BA/nouveau_dossier

La fonction os.makedirs()

Crée un répertoire et des sous-répertoires au besoin.

import os

chemin = "/home/vincent/PythonProjects/B-A-BA"
dossier = os.path.join(chemin,"nouveau_dossier", "sous_dossier")
os.makedirs(dossier)

Crée un répertoire et un sous répertoire :

/home/vincent/PythonProjects/B-A-BA/nouveau_dossier/sous_dossier

Afin de se prévenir des erreurs en cas de création de dossier déjà existant, la fonction os.makedirs() dispose d’un argument qui permet de ne pas retourner d’erreur si ces dossier existe déjà, il s’agit de l’argument « exist_ok= True » :

import os

chemin = "/home/vincent/PythonProjects/B-A-BA"
dossier = os.path.join(chemin,"nouveau_dossier", "sous_dossier")
os.makedirs(dossier, exist_ok=True)

Va créer le dossier, qui existe ou pas :

/home/vincent/PythonProjects/B-A-BA/nouveau_dossier/sous_dossier

La fonction os.path.exists()

Vérifie la présence d’un répertoire (en argument), si le répertoire est présent, renvoi True, sinon renvoi False.

import os

chemin = "/home/vincent/PythonProjects/B-A-BA"
dossier = os.path.join(chemin,"nouveau_dossier")
if os.path.exists(dossier):
    print(f"Le dossier {dossier} existe déjà")
else:
    os.mkdir(dossier)
    print(f"Le dossier {dossier} à bien été crée")

Si le répertoire n’est pas présent, va afficher :

>>> Le dossier /home/vincent/PythonProjects/B-A-BA/nouveau_dossier à bien été crée

Si le répertorie existe déjà :

Le dossier /home/vincent/PythonProjects/B-A-BA/nouveau_dossier existe déjà

La fonction os.removedirs()

Supprimer un répertoire et ses sous-répertoires.

chemin = "/home/vincent/PythonProjects/B-A-BA"
dossier = os.path.join(chemin,"nouveau_dossier")
os.removedirs(dossier)

Va supprimer /home/vincent/PythonProjects/B-A-BA/nouveau_dossier si il existe.

Afin d’éviter les erreurs au cas ou l’on essaye de supprimer des répertoires qui n’existent pas il est préférable d’exécuter cette fonction dans une boucle conditionnelle :

import os

chemin = os.getcwd()
newrep = os.path.join(chemin, "nouveau_dossier")
if os.path.exists(newrep):
    os.removedirs(newrep)
else:
    print("Ce répertoire n'existe pas")

Va supprimer le répertoire si il existe, sinon affiche le message « Ce répertoire n’existe pas »

La fonction os.getcwd()

Cette fonction renvoi sous forme de string le chemin relatif ou est exécuter le script :

import os

chemin = os.getcwd()
print(chemin)

>>> /home/vincent/PythonProjects/B-A-BA

ATTENTION, cette méthode renvoi le chemin d’où est exécuté le script et non pas le chemin relatif ou est enregistré le script.

Cette commande simple et direct est donc plutot a reserver pour des scripts simples comme des exercices mais est inutilisable sur des scripts devant être utilisés en production.
En effet il est impossible de savoir à l’avance de où seront lancés les scripts.

L’attribut __file__

Cette attribut n’est pas lié au module os et est constamment disponible dans Python. Toutefois, comme il est extrêmement utile en complément du module os, voilà en quoi il consiste :

L’attribut __file__ est tout simplement une sorte de variable qui contient toujours le nom du fichier en cours.

current_file = __file__
print(__file__)

>>> fichier_test.py

La methode .realpath()

Cette méthode renvoi le chemin complet relatif incluant le nom de son argument ou se trouve le script :

import os

current_file = __file__
my_path = os.path.realpath(__file__)
print(my_path)

>>> /home/vincent/PythonProjects/exos/fichier_test.py

ATTENTION, selon le système d’exploitation et/ou l’interpreter Python, lorsque l’on stock le résultat dans une variable, un print() de cette variable peut apparaître vide. Ce n’est toutefois qu’une question d’affichage.

La methode .dirname()

Assez similaire à la méthode .realpath() mais renvoie uniquement le chemin relatif ou est le script, sans le nom du fichier :

import os

current_file = __file__
my_path = os.path.realpath(__file__)
my_parent_path = os.path.dirname(my_path)

print(__file__)
print(my_path)
print(my_parent_path)

>>> fichier_test.py
>>> /home/vincent/PythonProjects/exos/fichier_test.py
>>> /home/vincent/PythonProjects/exos/

Pour garantir la bonne execution des scripts, une convention veut que l’on utilise cette syntaxe dans les scripts pour récupérer correctement le chemin relatif et cela d’où soit lancer le script :

import os

cwd = os.path.dirname(os.path.realpath(__file__))
print(cwd)

La méthode .splitext()

Cette méthode permet de découper une string avant une extension, elle la stock alors dans un tuple :

import os

fichier = "/home/vincent/fichier.json"
extention = os.path.splitext(fichier)
print(extention)

>>> ('/home/vincent/fichier', '.json')

On peut récupérer le type d’extension en récupérant la dernière valeur de ce tuple (index -1) puis en supprimant le . avec la méthode .strip() :

import os

fichier = "/home/vincent/fichier.json"
ext = os.path.splitext(fichier)[-1]
ext_clean = ext.strip(".")
print(ext_clean)

>>> json

Récupérer les variable d’environnement avec .environ.get()

import os

env_var = os.environ.get("HOME")
print(env_var)

>>> /home/vincent

0 commentaire

Laisser un commentaire