
Interagir avec le système de fichiers (module os)
Découvrez comment interagir avec le système de fichiers en Python en utilisant le module os. Apprenez à lister les fichiers et répertoires, créer, renommer et supprimer des fichiers et répertoires, obtenir des informations sur les fichiers, et parcourir r
Lister les fichiers et répertoires : explorez votre disque dur
Le module `os` fournit des fonctions pour interagir avec le système d'exploitation, y compris pour manipuler le système de fichiers. L'une des fonctions les plus utiles est `os.listdir()`, qui vous permet de lister les fichiers et les répertoires contenus dans un répertoire donné.
`os.listdir()` prend en argument le chemin du répertoire (relatif ou absolu), et renvoie une liste de chaînes de caractères, contenant les noms des fichiers et des répertoires. L'ordre des éléments dans la liste est arbitraire (il dépend du système de fichiers).
Par exemple : `import os; fichiers = os.listdir('.')` renvoie la liste des fichiers et répertoires contenus dans le répertoire courant (`.`).
Vous pouvez utiliser une boucle `for` pour parcourir la liste renvoyée par `os.listdir()`, et effectuer des opérations sur chaque fichier ou répertoire.
Nous verrons comment utiliser `os.listdir()`, comment filtrer les résultats (par exemple, pour ne lister que les fichiers, ou que les répertoires), et comment gérer les erreurs (par exemple, si le répertoire n'existe pas).
Créer, renommer et supprimer des fichiers et répertoires : modifiez le système de fichiers
Le module `os` vous permet également de modifier le système de fichiers :
- `os.mkdir(chemin)` : crée un nouveau répertoire. Si le répertoire parent n'existe pas, une exception `FileNotFoundError` est levée. Vous pouvez utiliser `os.makedirs(chemin)` pour créer un répertoire et tous les répertoires parents nécessaires.
- `os.rename(ancien_chemin, nouveau_chemin)` : renomme un fichier ou un répertoire. Si le nouveau chemin pointe vers un emplacement différent, le fichier ou le répertoire est déplacé.
- `os.remove(chemin)` : supprime un fichier. Si le chemin pointe vers un répertoire, une exception `IsADirectoryError` est levée. Pour supprimer un répertoire, vous devez utiliser `os.rmdir(chemin)` (le répertoire doit être vide) ou `shutil.rmtree(chemin)` (supprime le répertoire et tout son contenu, attention !).
Il est important de faire attention lorsque vous utilisez ces fonctions, car elles peuvent modifier ou supprimer des données de manière irréversible. Assurez-vous de bien comprendre ce que vous faites, et testez votre code soigneusement.
Nous verrons des exemples d'utilisation de ces fonctions, et comment gérer les erreurs potentielles.
Obtenir des informations sur les fichiers : taille, date de modification, etc.
Le module `os` fournit des fonctions pour obtenir des informations sur les fichiers, comme leur taille, leur date de modification, leurs permissions, etc.
- `os.stat(chemin)` : renvoie un objet `stat_result` contenant diverses informations sur le fichier ou le répertoire. Vous pouvez accéder aux informations individuelles en utilisant les attributs de l'objet `stat_result`, comme `st_size` (taille en octets), `st_mtime` (date de dernière modification, sous forme de timestamp), `st_mode` (permissions), etc.
- `os.path.getsize(chemin)` : renvoie la taille du fichier en octets (équivalent à `os.stat(chemin).st_size`).
- `os.path.getmtime(chemin)` : renvoie la date de dernière modification du fichier (équivalent à `os.stat(chemin).st_mtime`).
- `os.path.exists(chemin)` : renvoie `True` si le chemin pointe vers un fichier ou un répertoire existant, `False` sinon.
- `os.path.isfile(chemin)`: renvoie `True` si le chemin pointe vers un fichier régulier, `False` sinon.
- `os.path.isdir(chemin)` : renvoie `True` si le chemin pointe vers un répertoire, `False` sinon.
Nous verrons comment utiliser ces fonctions, et comment interpréter les informations renvoyées.
Parcourir récursivement une arborescence (`os.walk`) : explorez en profondeur
La fonction `os.walk()` vous permet de parcourir récursivement une arborescence de répertoires, c'est-à-dire un répertoire et tous ses sous-répertoires, sous-sous-répertoires, etc.
`os.walk(chemin)` renvoie un générateur qui produit des tuples pour chaque répertoire rencontré. Chaque tuple contient trois éléments :
- Le chemin du répertoire courant (sous forme de chaîne de caractères).
- Une liste des noms des sous-répertoires du répertoire courant.
- Une liste des noms des fichiers du répertoire courant.
Vous utilisez généralement `os.walk()` avec une boucle `for` : `for repertoire, sous_repertoires, fichiers in os.walk(chemin): ...`. A chaque itération de la boucle, vous obtenez les informations sur un répertoire de l'arborescence.
Vous pouvez utiliser `os.walk()` pour effectuer des opérations sur tous les fichiers d'une arborescence, pour rechercher des fichiers spécifiques, pour calculer la taille totale d'un répertoire et de ses sous-répertoires, etc.
Nous verrons des exemples d'utilisation de `os.walk()`, et comment l'utiliser pour résoudre des problèmes courants.