
I. Présentation
Dans ce tutoriel, nous allons apprendre à gérer nos fichiers avec Python de manière uniforme, que vous soyez sous Linux ou Windows.
Nous allons pour cela nous aider du module standard os disponible par défaut pour toute installation de Python3. Il s’agit d’un module central pour gérer son système de fichier ou interagir avec le système d’exploitation.
Également, si vous débutez en Python, consultez notre article d’introduction qui vous aidera à installer les prérequis et acquérir les bases du langage :
Note : pour suivre ce tutoriel, je vous recommande de passer par le mode interactif de Python plutôt que par un script. Cela rend l’utilisation plus dynamique et plus simple pour un apprentissage.
II. Importer le module OS
Pour commencer à utiliser le module os, il est nécessaire de l’importer dans votre session interactive ou script Python. Le fait que le module soit présent sur votre système ne suffit pas, il faut aussi l’importer. Cela se fait simplement avec l’instruction suivante :
import os
Nous pouvons ensuite lister toutes les fonctions de ce module grâce à l’instruction suivante :
# Lister les attributs et méthodes du module os
dir(os)
# Sortie attendue
[…]’, ‘abort’, ‘access’, ‘altsep’, ‘chdir’, ‘chmod’, ‘chown’, ‘chroot’, ‘close’, ‘closerange’, ‘confstr’, ‘confst, ‘environ’, ‘environb’, ‘error’, ‘eventfd’, ‘eventfd_read’, ‘eventfd_write’, ‘execl’, ‘execle’, ‘execlp’, ‘execlforkpty’, ‘fpathconf’, ‘fsdecode’, ‘fsencode’, ‘fspath’, ‘fstat’, ‘fstatvfs’, ‘fsync’, ‘ftruncate’, ‘fwalk’, ‘getvb’, ‘geteuid’, ‘getgid’, ‘getgrouplist’, ‘getgroups’, ‘getloadavg’, ‘getlogin’, ‘getpgid’, ‘getpgrp’, ‘getpid’, y’, ‘kill’, ‘killpg’, ‘lchown’, ‘linesep’, ‘link’, ‘listdir’, ‘listxattr’, ‘lockf’, ‘login_tty’, ‘lseek’, ‘lstat’ty’, ‘pardir’, ‘path’, ‘pathconf’, ‘pathconf_names’, ‘pathsep’, ‘pidfd_open’, ‘pipe’, ‘pipe2’, ‘popen’, ‘posix_fareadlink’, ‘readv’, ‘register_at_fork’, ‘remove’, ‘removedirs’, ‘removexattr’, ‘rename’, ‘renames’, ‘replace’, ‘retscheduler’, ‘sched_param’, ‘sched_rr_get_interval’, ‘sched_setaffinity’, ‘sched_setparam’, ‘sched_setscheduler’setns’, ‘setpgid’, ‘setpgrp’, ‘setpriority’, ‘setregid’, ‘setresgid’, ‘setresuid’, ‘setreuid’, ‘setsid’, ‘setuid’ ‘stat’, ‘stat_result’, ‘statvfs’, ‘statvfs_result’, ‘strerror’, ‘supports_bytes_environ’, ‘supports_dir_fd’, ‘su’, ‘system’, ‘tcgetpgrp’, ‘tcsetpgrp’, ‘terminal_size’, ‘times’, ‘times_result’, ‘truncate’, ‘ttyname’, ‘umask’, itid_result’, ‘waitpid’, ‘waitstatus_to_exitcode’, ‘walk’, ‘write’, ‘writev’]
En Python, la fonction dir(), permet d’obtenir une liste des attributs et méthodes disponibles pour un objet. Cela inclut des fonctions, des classes, et d’autres objets définis dans ce module. Nous n’utiliserons pas toutes les fonctions du module os, seulement quelques-une en relation avec la manipulation des fichiers.
Si vous souhaitez obtenir plus d’informations sur une fonction spécifique, notamment son utilisation, ses paramètres et sorties possibles, il faut aller voir du côté de la documentation officielle : docs.python.org/3/library/os.html.
En programmation, savoir lire correctement et comprendre la documentation est une compétence importante qui fait la différence en termes de qualité du code et de rapidité.
Voici à titre d’exemple le contenu de la documentation pour la fonction os.listdir() :
Extrait de la documentation Python du module os.
Le titre nous apprend que cette fonction prend en paramètre un chemin (une chaine de caractère). Dans la description qui suit, nous voyons que cette fonction retourne une liste dont l’ordre des éléments est aléatoire.
Faisons un test simple, qui concerne aussi bien la manipulation des fichiers que des dossiers avec cette première fonction :
# Sous Linux
os.listdir(“/home/mickael”)
# Sous Windows
os.listdir(“C:\\Users\\mickael”)
En réponse, vous devriez avoir un affichage tel que celui-ci :
>>> os.listdir(“/home/mickael/”)
[‘.ssh’, ‘.bashrc’, ‘.config’, ‘Bureau’, ‘.profile’,[…]
Passons à présent aux fonctions spécifiques au traitement des fichiers proposés par le module os.
III. Utilisation des fonctions de gestion des fichiers Python
A. Vérifier si un fichier existe
Commençons par une tâche relativement simple. Nous souhaitons vérifier qu’un fichier existe sur notre système. Il est pour cela possible d’utiliser la fonction os.path.exists(“chemin”). Voici un exemple :
# Vérifier qu’un fichier existe sous Linux
>>> os.path.exists(“/etc/hosts”)
True
# Vérifier qu’un fichier existe sous Windows
>>> os.path.exists(“C:\\Windows\\System32\\drivers\\etc\\hosts”)
True
# Exemple de réponse pour un fichier qui n’existe pas
>>> os.path.exists(“C:\\Windows\\System32\\drivers\\etc\\nexistepas”)
False
Cette fonction renvoi un booléen en sortie, c’est-à-dire une valeur True (vrai) ou False (faux).
Sous Windows, pensez à échapper les antislashs (“\”) dans vos chemins en les doublant (“\\”). Sinon, vous obtiendrez une erreur de syntaxe.
Cela facilite notamment son utilisation dans une condition. Voici un exemple sous Windows :
# Condition sur l’existence d’un fichier
>>> if os.path.exists(“C:\\Windows\\System32\\drivers\\etc\\nexistepas”):
… print(“Ce fichier existe”)
… else:
… print(“Ce fichier n’existe pas”)
…
Ce fichier n’existe pas
Nous pouvons aussi très bien stocker cette valeur booléenne dans une variable pour la réutiliser plus tard. Voici un exemple sous Linux :
# Utilisation d’une variable pour stocker le résultat booléen
>>> fichier_existe = os.path.exists(“/etc/hosts.bak”)
>>>print(fichier_existe)
False
Enfin, notez que cette fonction accepte également les chemins relatifs (chemin depuis position du script sur le système de fichier et non de sa racine C: ou /) :
# Vérifier l’existence d’un fichier en chemin relatif
>>> os.path.exists(“document.txt”)
True
Aussi, nous pouvons vérifier qu’un chemin mène bien vers un fichier, et non un dossier. Nous utiliserons pour cela la fonction os.path.isfile(“chemin”) :
# Vérifier si un chemin mène à un fichier ou un dossier
>>> os.path.isfile(“C:\\Windows”)
False
# Vérifier si un chemin mène à un fichier
>>> os.path.isfile(“C:\\Windows\\System32\\cmd.exe”)
True
# Vérifier si un chemin mène à un fichier (inexistant)
>>> os.path.isfile(“C:\\Windows\\System32\\cmd.exe.bak”)
False
Dans ce premier exemple, la fonction renvoie False, car le chemin existe, mais mène à un dossier. Les deux exemples suivants montrent la différence entre un fichier existant (et étant bien un fichier) et un fichier qui n’existe pas.
B. Récupérer les métadonnées d’un fichier
Les métadonnées sont toutes les informations sur le fichier lui-même plutôt que son contenu. On parle, par exemple, de sa taille, date de modification, date de création, etc. Sous Linux, cela inclut aussi les permissions et le propriétaire du fichier. Le module os offre plusieurs fonctions pour accéder à ces informations.
Pour obtenir la taille d’un fichier en octets, nous utiliserons la fonction os.path.getsize(“fichier”). Voici un exemple :
# Récupération de la taille d’un fichier
>>> taille = os.path.getsize(“/home/mickael/.bashrc”)
>>> print(f”La taille du fichier est : {taille} octets”)
La taille du fichier est : 6761 octets
Plusieurs fonctions permettent de retrouver les dates de dernières modifications (os.path.getmtime(“chemin”)), accès (os.path.getatime(“chemin”)) et changement de métadonnées (os.path.getctime(“chemin”)).
Attention, le getctime ne contient pas la date de création du fichier, mais la date de dernière modification des métadonnées (propriétaire, permissions, etc.).
Celles-ci renvoient les dates en secondes depuis le 1er janvier 1970 (format epoch). Vous pouvez convertir cette valeur en une date lisible avec le module standard datetime (qu’il faut aussi importer) :
# Import du module standard de manipulation des dates
>>> import datetime
# Récupérer la date de dernière modification d’un fichier
>>> date_modification = os.path.getmtime(“document.txt”)
# Transformation vers une syntaxe lisible de la date
>>> date_lisible = datetime.datetime.fromtimestamp(date_modification)
>>> print(f”Le fichier a été modifié pour la dernière fois le : {date_lisible}”)
Le fichier a été modifié pour la dernière fois le : 2023-10-01 20:34:57.070011
Cependant, il convient généralement d’utiliser la fonction os.stat(), qui permet d’obtenir toutes ces informations au sein d’un même objet :
# Chemin vers le fichier que nous voulons analyser
>>> fichier = “/home/mickael/Documents/document.txt”
# Utilisation d’os.stat pour obtenir des informations sur le fichier
# Cette fonction renvoie un objet contenant diverses informations sur le fichier
>>> info_file = os.stat(fichier)
>>> print(info_file)
os.stat_result(st_mode=33204,st_ino=3462458,st_dev=2049,st_nlink=1,st_uid=1000,st_gid=1000,st_size=8,st_atime=1741204820,st_mtime=1741204801,st_ctime=1741204801)
# Accès à l’attribut st_mtime de l’objet renvoyé par os.stat
>>> print(info_file.st_mtime)
# Exemple de sortie :
1741204801
Vous l’aurez compris, les attributs de l’objet stat st_mtime, st_atime et st_ctime permettent respectivement d’accéder à la date de dernière modification, accès et changement des métadonnées.
Pour faire un exemple plus complet, je vous propose l’exercice suivant :
Écrivez un petit script info_file.py qui va vérifier la date de modification, d’accès et de modification des métadonnées d’un fichier dont le chemin est inscrit en dur (dans une variable);
Le script doit également afficher la taille du fichier en octet;
Incluez une fonction de conversation du temps avec datetime ;
Vérifier avant tout que le fichier existe et est bien un fichier ;
Voici la réponse à cet exercice :
import os
import datetime
def convertir_timestamp(timestamp):
“””Convertit un timestamp en une date lisible.”””
return datetime.datetime.fromtimestamp(timestamp)
def afficher_infos_fichier(chemin_fichier):
“””Affiche les informations sur un fichier.”””
# Vérifier si le fichier existe et est bien un fichier
if not os.path.exists(chemin_fichier):
print(f”Le fichier ‘{chemin_fichier}’ n’existe pas.”)
return
if not os.path.isfile(chemin_fichier):
print(f”Le chemin ‘{chemin_fichier}’ n’est pas un fichier.”)
return
# Récupérer les informations du fichier
info_fichier = os.stat(chemin_fichier)
# Afficher la taille du fichier
taille = info_fichier.st_size
print(f”Taille du fichier : {taille} octets”)
# Afficher les dates de modification, d’accès et de changement des métadonnées
date_modification = convertir_timestamp(info_fichier.st_mtime)
date_acces = convertir_timestamp(info_fichier.st_atime)
date_changement = convertir_timestamp(info_fichier.st_ctime)
print(f”Date de dernière modification : {date_modification}”)
print(f”Date de dernier accès : {date_acces}”)
print(f”Date de dernier changement des métadonnées : {date_changement}”)
# Chemin du fichier (à remplacer par le chemin réel du fichier)
chemin_fichier = “/home/mickael/Documents/document.txt”
# Appeler la fonction pour afficher les informations du fichier
afficher_infos_fichier(chemin_fichier)
J’ai également réutilisé ce que nous avons appris plus haut en intégrant un test d’existence du fichier avec la fonction os.path.isfile(). Voici un retour possible de ce script :
$ python3 info_file.py
Taille du fichier : 8 octets
Date de dernière modification : 2025-03-05 20:19:57.070011
Date de dernier accès : 2025-03-05 20:20:11.882012
Date de dernier changement des métadonnées : 2025-03-05 20:19:57.07001
Ces fonctions sont particulièrement utiles pour la gestion des fichiers, par exemple, pour trier ou filtrer des fichiers en fonction de leur taille ou de leur date de modification.
C. Supprimer ou renommer un fichier
La gestion des fichiers inclut souvent des opérations de suppression ou de renommage. Encore une fois, c’est le module os que nous allons utiliser pour ces tâches. Pour supprimer un fichier, nous pouvons utiliser la fonction os.remove(“chemin”).
Attention, il n’y pas de retour arrière possible avec cette commande, le fichier sera définitivement supprimé (pas de corbeille).
Cette fonction prend en argument le chemin vers le fichier à supprimer.
>>> os.remove(“fichier_a_supprimer.txt”)
Pour éviter toute erreur, nous pouvons combiner cela avec la fonction os.path.exists vue précédemment. Sinon, cette opération lèvera une exception FileNotFoundError.
>>> if os.path.exists(“fichier_a_supprimer.txt”):
… os.remove(“fichier_a_supprimer.txt”)
… print(“Le fichier a été supprimé avec succès.”)
… else:
… print(“Le fichier n’existe pas.”)
Pour renommer un fichier ou le déplacer vers un autre emplacement, nous pouvons utiliser la fonction os.rename(“fichier”, “nouveau_fichier”). Cette fonction prend deux arguments : le nom/chemin source et celui de destination.
# Renommer un fichier en Python avec le module os
>>> os.rename(“document.txt”, “nouveau_nom.txt”)
Cette fonction peut également être utilisée pour déplacer un fichier vers un autre répertoire en spécifiant un chemin de destination complet.
# Changer un fichier de place en Python
>>> os.rename(“document.txt”, “/chemin/vers/nouveau_repertoire/nouveau_nom.txt”)
En utilisant ces fonctions, vous pouvez facilement gérer les fichiers sur votre système, que ce soit pour les supprimer ou les renommer selon vos besoins.
IV. Conclusion
Le module os est un très utile pour gérer les fichiers et interagir avec le système d’exploitation de manière uniforme, que ce soit sous Linux ou Windows.
En maîtrisant ces fonctions de base, vous serez en mesure de créer des scripts Python efficaces pour automatiser la gestion de vos fichiers.
Co-fondateur d’IT-Connect.fr.
Auditeur/Pentester chez Orange Cyberdéfense.