La module (ou librairie) OS en Python est une bibliothèque très utilisée pour interagir avec le système d’exploitation (Windows, Mac, Linux). Elle fournit notamment des fonctions utiles pour accéder à la gestion des fichiers et répertoires de l’ordinateur. Nous allons explorer ensemble les fonctions les plus utiles du module. Comme toujours, voici le lien vers la documentation officielle si vous souhaitez approfondir le sujet.

Récupérer le répertoire courant
Lorsque votre programme fonctionne, vous aurez certainement besoin de savoir dans quel dossier vous travaillez. De plus, l’emplacement du script et le répertoire de travail seront peut-être deux dossiers différents. Par exemple, ce sera le cas si c’est un outil que vous partagez avec d’autres personnes. Savoir où on travaille, c’est donc important ! Voici comment récupérer le chemin du répertoire actif :
import os # Ne pas oublier d'importer le module !
os.getcwd() # Get Current Working Directory : moyen mnémotechnique
>>> 'C:\\Users\\olivier\\Desktop'
PythonJe suis actuellement sur un système Windows et vous noterez les double backslashs dans le chemin. En effet, le backslash étant un caractère particulier pour Python, il faut le doubler pour qu’il soit considéré comme caractère.
Changer de répertoire
Si vous souhaitez que votre programme travaille dans un autre répertoire, c’est possible. Vous avez à disposition l’instruction « os.chdir(path) ». « chdir » est la contraction de « change directory ». Pour l’utiliser vous aurez besoin du chemin du dossier de travail et c’est tout.
dossier_actuel = os.getcwd() # Get Current Working Directory : moyen mnémotechnique
nouveau_dossier = dossier_actuel + "\\Dossier_de_travail"
os.chdir(nouveau_dossier)
os.getcwd()
>>> 'C:\\Users\\olivier\\Desktop\\Dossier_de_travail'
PythonListe des fichiers et répertoires
Une fois que vous serez dans le bon répertoire, vous aurez certainement besoin de connaître les fichiers présents. Vous utiliserez alors la fonction « os.listdir(path=’.’) ». Par défaut, la fonction travaille dans le répertoire courant mais vous pouvez très bien travailler ailleurs en renseignant l’argument « path ».
path = "C:\\Users\\olivier\\Dossier_test"
print(os.listdir(path))
>>> ['document1.docx', 'document2.docx', 'Dossier1', 'Dossier2', 'fichier1.txt', 'fichier2.txt',
>>> 'fichier3.txt', 'tableur1.xlsx', 'tableur2.xlsx']
PythonL’instruction « os.listdir() » renvoie donc une liste avec tous les éléments présents dans le dossier. Vous pourrez alors boucler sur chaque élément en contrôlant l’extension par exemple avec l’instruction .endswith(str).
fichier = 'fichier1.txt"
fichier.endswith(".txt")
>>> True
PythonIdentifier la nature d’un élément
Maintenant que nous avons la liste de nos éléments dans le dossier de travail, il faut pouvoir jouer avec. On cherchera alors à savoir si c’est un répertoire ou un fichier. On pourra même vérifier si un élément donné existe déjà. Voici comment réaliser ces trois actions :
elements = os.listdir()
os.path.isfile(elements[0]) # Fais référence à document1.docx
>>> True
os.path.isdir(elements[2]) # Fais référence à Dossier1
>>> True
os.path.exists(elements[-2]) # Fais référence à tableur1.xlsx
>>> True
PythonItérer facilement sur les éléments d’un dossier
Une manière plus efficace d’itérer sur les éléments d’un dossier sera d’utiliser la fonction « os.scandir(path) ». Cette fonction renvoie un objet sur lequel vous pourrez itérer et vérifier si c’est un fichier ou un dossier.
with os.scandir() as it:
for element in it:
if element.is_dir():
print(element.name)
>>> Dossier1
>>> Dossier2
# Ou on peut utiliser les listes de compréhension
fichiers = [element.name for element in os.scandir() if element.is_file()]
dossiers = [element.name for element in os.scandir() if element.is_dir()]
print(fichiers)
print(dossiers)
>>> ['document1.docx', 'document2.docx', 'fichier1.txt', 'fichier2.txt', 'fichier3.txt', >>> 'tableur1.xlsx', 'tableur2.xlsx']
>>> ['Dossier1', 'Dossier2']
PythonCréer des dossiers et sous-dossiers
Si vous manipulez des fichiers, vous aurez certainement besoin de créer des dossiers. Voici deux instructions qui pourront vous aider : « os.mkdir() » et « os.makedirs() ».
os.mkdir("Dossier1")
>>> FileExistsError: [WinError 183] Impossible de créer un fichier déjà existant: 'Dossier1'
os.mkdir("Dossier3")
print(os.listdir())
>>> ['document1.docx', 'document2.docx', 'Dossier1', 'Dossier2', 'Dossier3',
>>> 'fichier1.txt', 'fichier2.txt', 'fichier3.txt', 'tableur1.xlsx', 'tableur2.xlsx']
# Vous pouvez créer un sous-dossier dans un dossier existant avec mkkdir
os.mkdir("Dossier3\\Dossier1")
# Création récursive de dossiers car Dossier4 n'existe pas encore
os.makedirs("Dossier4\\Dossier1")
PythonLe premier exemple montre que vous ne pouvez pas créer un dossier qui existe déjà. Le second, quant à lui, va créer le dossier intitulé « Dossier3 ». Le troisième exemple montre qu’il est possible de créer un sous-dossier dans un dossier existant. Ici on vient de créer « Dossier1 » dans « Dossier3 » qui lui-même vient d’être fraîchement créé.
Enfin, au lieu d’utiliser plusieurs fois l’instruction « os.mkdir() » pour créer des dossiers et sous-dossiers, on peut utiliser l’instruction « os.makedirs() » qui permet de créer des dossiers de façon récursive. En d’autres termes, si un dossier est manquant pour créer un sous-dossier, la fonction créera les dossiers manquants.
Supprimer un fichier
Si vous souhaitez supprimer un fichier, assurez-vous que c’est le bon fichier. Une fois le fichier supprimé, vous ne pourrez plus revenir en arrière. J’attire donc votre attention sur une utilisation maîtrisée de cette instruction.
print(os.listdir())
>>> ['fichier1.txt', 'fichier2.txt', 'fichier3.txt']
os.remove("fichier3.txt")
print(os.listdir())
>>> ['fichier1.txt', 'fichier2.txt']
PythonLors de l’exécution de l’instruction, aucune confirmation ne vous sera demandée au cas où la suppression était une erreur.
Renommer un fichier ou un répertoire
Pour renommer un fichier, l’instruction « os.rename() » répondra à cette demande. Il faut renseigner les deux premiers arguments à savoir la source et la destination. Le source est le nom du fichier dans le répertoire courant ou le chemin absolu du fichier à renommer. Idem pour le fichier ou répertoire de destination.
os.rename("document1.docx","document_renommé.docx")
print(os.listdir())
>>> ['document2.docx', 'document_renommé.docx', 'Dossier1', 'Dossier2', 'Dossier3', 'Dossier4',
>>> 'fichier1.txt', 'fichier2.txt', 'fichier3.txt', 'tableur1.xlsx', 'tableur2.xlsx']
PythonCréer un chemin absolu facilement
path = os.path.join("C:\\","Users","olivier","Desktop")
path
>>> 'C:\\Users\\olivier\\Desktop'
l = os.listdir()
os.path.abspath(l[0])
>>> 'C:\\Users\\olivier\\Desktop\\Dossier_test\\document1.docx'
PythonExécuter une commande du système
Si vous souhaitez lancer un script ou une commande système, vous pouvez utiliser l’instruction « os.system(commande) ». Vous aurez alors besoin de la commande exacte pour lancer l’instruction.
os.system('ls -a') # pour les utilisateurs Linux :)
PythonUtiliser le login de l’utilisateur
Afin de personnaliser votre programme, vous pouvez vous adresser directement à l’utilisateur en utilisant son identifiant. Voici la commande qui permet de le récupérer.
utilisateur = os.getlogin()
print(f'Bonjour {utilisateur}')
>>> Bonjour olivier
PythonPour résumé
Le module OS en Python fournit de nombreuses fonctions utiles pour interagir avec le système d’exploitation. Les fonctions citées précédemment sont loin d’être une liste exhaustive. Je vous renvoie donc vers la documentation via le lien dans l’introduction pour plus de détails.
Une utilisation non maîtrisée de la librairie OS peut endommager votre système. Je vous conseille donc d’être vigilant si vous utilisez une fonction que vous ne connaissez pas. Lisez la documentation associée et faites un test dans un répertoire qui ne craint rien.
Merci de m’avoir lu, n’hésitez pas à laisser un commentaire,
A bientôt,
Benjamin