Manipulation de fichiers et de dossiers

PythonBeginner
Pratiquer maintenant

Introduction

Ce laboratoire est conçu pour vous aider à comprendre comment manipuler des fichiers et des dossiers à l'aide de Python. Nous utiliserons les modules os et glob, qui offrent un moyen d'interagir avec le système de fichiers et de réaliser des opérations courantes telles que la création, la suppression et le déplacement de fichiers et de répertoires.

Objectifs

  • Module os
  • Module glob

Création de dossiers et de fichiers

Voici un code Python qui crée plusieurs groupes de dossiers et de fichiers d'échantillonnage :

import os

## Création de plusieurs groupes de dossiers et de fichiers d'échantillonnage
for i in range(3):
    ## Création d'un nouveau dossier pour chaque groupe
    folder_name = "group_" + str(i)
    os.makedirs(folder_name)

    ## Création de fichiers d'échantillonnage dans chaque dossier
    for j in range(3):
        file_name = "file_" + str(j) + ".txt"
        file_path = os.path.join(folder_name, file_name)
        with open(file_path, "w") as file:
            file.write("This is a sample file.")

Vous pouvez ouvrir create_samples.py dans l'éditeur et exécuter le code pour voir les résultats.

os.makedirs(path) est une fonction du module os en Python qui crée un répertoire au chemin spécifié. Dans ce cas, le path est le folder_name, qui est construit en concaténant la chaîne de caractères "group_" avec la valeur actuelle de la variable i de la boucle for externe, donnant "group_0", "group_1" et "group_2".

os.path.join(path1, path2,...) est une fonction du module os.path qui combine un ou plusieurs chemins. Dans ce cas, path1 est le folder_name et path2 est le file_name, qui est construit en concaténant la chaîne de caractères "file_" avec la valeur actuelle de la variable j de la boucle for interne, donnant "file_0.txt", "file_1.txt" et "file_2.txt". La fonction os.path.join() est utilisée pour concaténer le nom de dossier et le nom de fichier pour créer le chemin de fichier complet afin que le fichier puisse être créé à l'intérieur du dossier.

En utilisant la fonction os.path.join, le code s'assure d'utiliser le séparateur correct pour le système d'exploitation actuel pour joindre le nom de dossier et le nom de fichier, peu importe que le code soit exécuté sous Windows, Linux ou macOS.

Plus sur le module Os

Le module os en Python fournit un moyen d'interagir avec le système d'exploitation, vous permettant d'effectuer diverses tâches telles que la création et la suppression de répertoires, la lecture et l'écriture de fichiers, et l'exécution de commandes.

Ouvrez un nouvel interpréteur Python.

python3

Voici quelques exemples d'autres fonctions utiles fournies par le module os :

  • os.listdir(path) : Renvoie une liste de tous les fichiers et répertoires dans le répertoire spécifié.

    os.listdir('.') ## renvoie une liste de tous les fichiers et répertoires dans le répertoire courant
  • os.remove(path) : Supprime le fichier au chemin spécifié.

    os.remove('file.txt') ## supprime le fichier nommé 'file.txt'
  • os.rmdir(path) : Supprime le répertoire vide au chemin spécifié.

    os.rmdir('folder') ## supprime le dossier vide nommé 'folder'
  • os.rename(src, dst) : Renomme un fichier ou un répertoire du chemin src au chemin dst.

    os.rename('file1.txt', 'file2.txt') ## renomme le fichier 'file1.txt' en 'file2.txt'
  • os.chdir(path) : Change le répertoire de travail actuel au chemin spécifié.

    os.chdir('/home/user/documents') ## change le répertoire de travail actuel en '/home/user/documents'
  • os.getcwd() : Renvoie le répertoire de travail actuel.

    os.getcwd() ## renvoie le répertoire de travail actuel, par exemple '/home/user/documents'

Notez que la plupart des fonctions ci-dessus leveront une exception (FileNotFoundError, OSError, etc.) si le fichier ou le répertoire spécifié n'existe pas ou si vous n'avez pas les autorisations nécessaires.

Parcours d'un arbre de répertoires

os.walk(top, topdown=True, onerror=None, followlinks=False) est une fonction du module os en Python qui génère les noms de fichiers dans un arbre de répertoires en parcourant l'arbre soit de haut en bas soit de bas en haut. Par défaut, os.walk() génère les noms de fichiers dans un arbre de répertoires de haut en bas. Pour chaque répertoire dans l'arbre enraciné dans le répertoire top (y compris top lui-même), elle renvoie un tuple de 3 éléments (dirpath, dirnames, filenames).

Voici un exemple de manière dont vous pouvez utiliser os.walk() pour afficher tous les fichiers dans un répertoire et ses sous-répertoires :

import os

## Affiche tous les fichiers dans un répertoire et ses sous-répertoires
for root, dirs, files in os.walk('.'):
    for file in files:
        print(os.path.join(root, file))

Ce code commencera au répertoire courant (indiqué par '.') et parcourra récursivement tous les sous-répertoires, affichant le chemin complet de chaque fichier qu'il rencontre.

Voici un autre exemple où vous pouvez utiliser os.walk() pour rechercher un fichier spécifique avec une extension spécifique dans un répertoire :

import os

def search_file(directory, file_extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(file_extension):
                print(os.path.join(root, file))

search_file('.','.txt')

Cela cherchera tous les fichiers avec l'extension '.txt' et affichera le chemin complet du fichier.

os.walk() est une fonction puissante qui peut être utilisée pour de nombreuses tâches telles que la recherche de fichiers, l'analyse des structures de répertoires, etc.

Il est important de noter que os.walk est un générateur, ce qui signifie qu'il génère les valeurs au fur et à mesure, plutôt que de les conserver toutes en mémoire. Cela le rend efficace pour gérer de grands arbres de répertoires.

Le module Glob

Le module glob en Python fournit un moyen de rechercher des fichiers et des répertoires en utilisant des caractères joker. glob.glob(pathname) renvoie une liste de chemins de fichiers qui correspondent au motif de chemin spécifié.

Voici un exemple de manière dont vous pouvez utiliser glob.glob() pour trouver tous les fichiers avec l'extension ".txt" dans le répertoire courant :

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

Ce code recherchera tous les fichiers avec l'extension ".txt" dans le répertoire courant et renverra une liste de chemins de fichiers qui correspondent au motif.

Il est similaire à la fonction os.walk(), mais il ne recherche pas récursivement dans les sous-répertoires. Il ne cherche que les fichiers qui correspondent au motif spécifié dans le répertoire courant.

Voici un exemple de manière dont vous pouvez utiliser glob.glob() pour trouver tous les fichiers avec l'extension ".txt" dans tous les sous-répertoires :

import glob

txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)

Ce code recherchera tous les fichiers avec l'extension ".txt" dans le répertoire courant et tous les sous-répertoires.

En général, glob.glob() est plus pratique lorsque vous cherchez uniquement des fichiers dans un répertoire et ses sous-répertoires. Cependant, os.walk() est plus puissante et flexible car elle peut être utilisée pour rechercher des fichiers dans plusieurs répertoires ou pour analyser la structure d'un arbre de répertoires.

Il est important de noter que, comme os.walk, le glob est également un générateur, ce qui signifie qu'il génère les valeurs au fur et à mesure, plutôt que de les conserver toutes en mémoire. Cela le rend efficace pour gérer un grand nombre de fichiers.

Résumé

Dans ce laboratoire, nous avons appris à utiliser Python pour manipuler des fichiers et des dossiers en utilisant les modules os et glob. Nous avons vu comment créer un nouveau dossier, changer le répertoire de travail actuel, créer un nouveau fichier, écrire dans un fichier, fermer un fichier, lister le contenu d'un répertoire et trouver les fichiers qui correspondent à un certain motif à l'aide de glob.