Aller au contenu
Accueil » Le module OS en Python

Le module OS en Python

    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.

    Gestion des fichiers et dossiers avec Python

    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'
    Python

    Je 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'
    Python

    Liste 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']
    Python

    L’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
    Python

    Identifier 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
    Python

    Ité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']
    Python

    Cré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")  
    
    Python

    Le 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']
    Python

    Lors 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']
    Python

    Cré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'
    Python

    Exé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 :)
    Python

    Utiliser 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
    Python

    Pour 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

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire