Manipuler correctement les fichiers en Python peut être un défi, surtout lorsqu’il s’agit de gérer les ouvertures, fermetures et lectures sans erreur.
Des fichiers mal ouverts ou non fermés peuvent entraîner des fuites de mémoire, des erreurs d’exécution et des pertes de données, compliquant le bon fonctionnement des applications.
Cet article vous guide à travers les bonnes pratiques de gestion des fichiers en Python, en utilisant des méthodes comme open()
et l’instruction with
pour garantir une manipulation sécurisée et optimisée des fichiers.
Assimiler les différents modes d'ouverture de fichiers en Python
En Python, la persistance des données est directement liée à la manipulation des fichiers. Il est donc essentiel de connaître les différents modes d’ouverture de fichiers disponibles, tels qu’expliqués dans le tableau ci-dessous :
Mode | Description |
---|---|
r | Lecture seule. Le fichier doit exister.
|
w | Écriture. Crée un nouveau fichier ou écrase le fichier existant.
|
a | Ajout. Ajoute les données à la fin du fichier existant.
|
r+ | Lecture et écriture. Le fichier doit exister.
|
w+ | Lecture et écriture. Crée un nouveau fichier ou écrase le fichier existant.
|
a+ | Lecture et ajout. Ajoute les données à la fin du fichier existant.
|
rb | Lecture en mode binaire. Le fichier doit exister.
|
wb | Écriture en mode binaire. Crée un nouveau fichier ou écrase le fichier existant.
|
ab | Ajout en mode binaire. Ajoute les données à la fin du fichier existant.
|
rb+ | Lecture et écriture en mode binaire. Le fichier doit exister.
|
wb+ | Lecture et écriture en mode binaire. Crée un nouveau fichier ou écrase le fichier existant.
|
ab+ | Lecture et ajout en mode binaire. Ajoute les données à la fin du fichier existant.
|
Manipulation des fichiers en Python avec open() et with
La manipulation des fichiers est une compétence essentielle en Python, utilisée pour lire, écrire et gérer les données. Pour travailler avec des fichiers, il est nécessaire de comprendre comment les ouvrir correctement en utilisant la fonction open()
, qui permet d’ouvrir un fichier en spécifiant son chemin et le mode d’accès souhaité (lecture, écriture, ajout, etc.).
La fonction open() en Python
La fonction open()
est le point de départ pour manipuler les fichiers en Python. Sa syntaxe de base est la suivante :
Ouvrir des fichiers sans with en Python
Lorsqu’on utilise open()
sans l’instruction with, il est nécessaire de gérer explicitement la fermeture du fichier pour libérer les ressources système. Voici comment cela fonctionne :
Supposons que nous avons créé un fichier texte nommé fichier.txt dans lequel nous avons écrit la phrase : « bonjour tout le monde », comme illustré dans la figure suivante.
Pour lire le contenu de ce fichier, nous allons utiliser la fonction open. Cette fois-ci, nous effectuerons la fermeture manuelle du fichier en appelant fichier.close(), comme montré dans le code ci-dessous :
fichier = open('fichier.txt', 'r')
contenu = fichier.read()
print(contenu)
fichier.close()
En exécutant ce programme, le contenu de notre fichier s’affiche correctement.
Cependant, cette méthode nécessite une gestion prudente pour éviter les fuites de ressources, en particulier si une exception se produit avant la fermeture du fichier.
Utiliser with pour une gestion automatique des fichiers
L’instruction with est généralement préférée car elle gère automatiquement la fermeture du fichier, même en cas d’erreur. En utilisant with, vous créez un contexte de gestion des ressources qui assure la fermeture du fichier une fois le bloc de code terminé :
with open('fichier.txt', 'mode') as fichier:
# Opérations sur le fichier
contenu = fichier.read()
L’utilisation de with simplifie la gestion des fichiers et réduit le risque d’erreurs liées à l’omission de la fermeture du fichier. Voici des exemples pour ouvrir un fichier en utilisant trois modes différents :
Mode lecture (‘r’) : Pour lire le contenu d’un fichier existant.
Dans cet exemple, le fichier exemple.txt est ouvert en mode lecture. Son contenu est lu, puis le fichier est automatiquement fermé après l’exécution du bloc with.
Mode écriture (‘w’) : Pour créer un nouveau fichier ou écraser un fichier existant.
with open('exemple.txt', 'w') as fichier:
fichier.write('Ceci est un nouveau contenu.')
Ici, le fichier exemple.txt est ouvert en mode écriture. S’il n’existe pas, il est créé. S’il existe, son contenu est écrasé. Le fichier est ensuite automatiquement fermé.
Voici ce qui est créé après l’exécution du programme, ainsi que le contenu du fichier :
Mode ajout (‘a’) : Pour ajouter des données à la fin d’un fichier existant.
with open('exemple.txt', 'a') as fichier:
fichier.write('\nAjout d\'une nouvelle ligne.')
Ce mode ouvre le fichier exemple.txt en mode ajout, permettant d’ajouter du texte à la fin du fichier sans écraser son contenu existant. Le fichier est également fermé automatiquement après l’ajout.
Voici le nouveau contenu de fichier exemple.txt :
Pour écrire dans un fichier texte en Python, vous devez suivre les méthodes suivantes :
Ouvrir le fichier : Utilisez la fonction open()
pour ouvrir le fichier en spécifiant le mode d’ouverture, tel que ‘w’ pour l’écriture. Si le fichier n’existe pas, il sera créé, et s’il existe déjà, son contenu sera remplacé. Vous pouvez également utiliser l’instruction with pour ouvrir le fichier, ce qui garantit sa fermeture automatique après l’opération.
with open("mon_fichier.txt", "w") as fichier:
Écrire dans le fichier :
- Utilisez la méthode
write()
pour écrire directement du texte dans le fichier. Cette méthode prend une chaîne de caractères comme argument. - Vous pouvez également utiliser la fonction print() avec l’argument file pour écrire dans le fichier. Cette méthode est pratique si vous souhaitez ajouter des lignes de texte formatées, de la même manière que vous les afficheriez dans la console.
Fermer le fichier : Si vous n’utilisez pas l’instruction with,
vous devez fermer le fichier manuellement avec close()
. Cependant, si vous utilisez with, le fichier est fermé automatiquement à la fin du bloc.
Voici un code qui récapitule toutes les étapes à suivre pour écrire dans un fichier .txt à partir d’un script Python :
# Utiliser 'with' pour ouvrir le fichier en mode écriture
with open("mon_fichier.txt", "w") as fichier:
# Écrire du texte dans le fichier avec la méthode write()
fichier.write("Ceci est un exemple de texte écrit dans un fichier.\n")
# Écrire du texte dans le fichier avec la fonction print()
print("Ceci est un autre exemple de texte écrit avec print().", file=fichier)
Voici le contenu de mon_fichier.txt après l’exécution de ce code Python :
Formation Python : Se former à la persistance des données
Exploitez la persistance des données en python
Lire le contenu d’un fichier texte en Python
Pour comprendre comment lire le contenu d’un fichier texte en Python, il est essentiel de commencer par créer ce fichier et le remplir avec des données. Cela vous permettra d’avoir un exemple pratique sur lequel travailler. Voici comment procéder :
Commençons par créer un fichier texte nommé file.txt et y écrire quelques lignes de contenu. Nous utiliserons la méthode open()
avec le mode ‘w’ pour créer et écrire dans le fichier. Le code ci-dessous montre comment écrire une série de lignes numérotées dans ce fichier :
with open("file.txt", "w") as f:
# Écrire 20 lignes numérotées dans le fichier
for i in range(20):
f.write("Le numéro : " + str(i + 1) + "\n")
Ce code crée un fichier nommé file.txt et y écrit 20 lignes, chacune contenant un numéro allant de 1 à 20. Voici le contenu de mon fichier après l’exécution du code :
Maintenant que le fichier est créé et rempli, nous allons lire son contenu. La lecture d’un fichier texte en Python peut se faire de différentes manières, en fonction de vos besoins. Vous pouvez lire l’intégralité du fichier d’un coup, lire ligne par ligne, ou lire un nombre spécifique de caractères comme il est bien expliquer dans le tableau suivant :
Méthode | Description |
---|---|
read() | Lit l’intégralité du fichier d’un coup et retourne le contenu sous forme de chaîne de caractères.
|
readline() | Lit une seule ligne du fichier à la fois. Utile pour parcourir le fichier ligne par ligne.
|
readlines() | Lit toutes les lignes du fichier et retourne une liste de chaînes de caractères, où chaque élément représente une ligne.
|
read(n) | Lit un nombre spécifique de caractères du fichier. Si n n’est pas spécifié, lit le reste du fichier à partir de la position actuelle.
|
Lire une ligne avec readline() en Python
La fonction readline()
lit une seule ligne à la fois d’un fichier ouvert, ce qui est pratique pour traiter les fichiers ligne par ligne sans charger l’ensemble du fichier en mémoire. Par exemple, si vous avez un fichier texte contenant plusieurs lignes et que vous souhaitez afficher chaque ligne séparément, vous pouvez utiliser readline() dans une boucle while pour lire chaque ligne successivement. Voici un exemple :
# Ouvrir un fichier en mode lecture
with open('file.txt', 'r') as fichier:
# Lire chaque ligne une par une
ligne = fichier.readline()
while ligne:
print(ligne.strip()) # Afficher la ligne en supprimant les espaces superflus
ligne = fichier.readline() # Lire la ligne suivante
Ainsi voici ce qui est affiché en exécutant ce code :
Dans cet exemple, readline() lit une ligne du fichier à chaque appel et la boucle continue jusqu’à ce que readline() renvoie une chaîne vide, indiquant la fin du fichier. Cette méthode est particulièrement efficace pour traiter de grands fichiers ligne par ligne sans surcharger la mémoire, contrairement à readlines(), qui chargerait toutes les lignes en mémoire simultanément.
Avantages de readline() pour la lecture de fichiers
l’utilisation de la fonction readline()
présente de nombreux avantages, tels que :
- Gestion efficace de la mémoire : En lisant le fichier ligne par ligne, readline() évite de charger l’ensemble du fichier en mémoire, ce qui est particulièrement bénéfique lorsque vous travaillez avec des fichiers volumineux. Cela permet de gérer des fichiers de taille variable sans risquer de surcharger la mémoire disponible.
- Traitement séquentiel des données : Grâce à readline(), vous pouvez traiter chaque ligne individuellement au fur et à mesure qu’elle est lue, ce qui est idéal pour les opérations nécessitant une analyse ligne par ligne. Cela facilite la gestion de données structurées ou de logs où chaque ligne contient des informations distinctes.
- Flexibilité dans la gestion des fichiers : La capacité de lire les fichiers ligne par ligne permet de gérer des fichiers de tailles variables avec une plus grande flexibilité. Vous pouvez adapter votre traitement en fonction du contenu de chaque ligne, ce qui offre un contrôle plus précis sur le traitement des données.
- Simplicité d’utilisation : readline() est facile à utiliser dans une boucle pour itérer à travers chaque ligne du fichier. Cette simplicité facilite l’implémentation de processus de lecture et de traitement de fichiers sans nécessiter de structures complexes.
Ces avantages font de la fonction readline() un outil précieux pour la gestion de fichiers texte volumineux et pour les opérations qui nécessitent une lecture progressive et contrôlée des données.
Lire plusieurs lignes avec readlines() en Python
La fonction readlines()
permet de lire toutes les lignes d’un fichier ouvert et de les retourner sous forme de liste. Chaque élément de cette liste correspond à une ligne du fichier, y compris le caractère de fin de ligne (\n).
Cette fonction est particulièrement utile lorsque vous souhaitez charger l’intégralité du contenu d’un fichier en mémoire et traiter ses lignes individuellement par la suite.
Lors de l’utilisation de readlines()
, chaque ligne est lue et stockée comme un élément distinct dans une liste Python, ce qui permet un accès rapide et facile à n’importe quelle ligne en utilisant les index de la liste. Toutefois, il est important de noter que readlines() peut consommer beaucoup de mémoire si le fichier est très volumineux, car toutes les lignes sont chargées simultanément en mémoire.
with open("file.txt", "r") as f:
lignes = f.readlines() # Lire toutes les lignes du fichier dans une liste
for ligne in lignes:
print(ligne) # Afficher chaque ligne
Ainsi voici ce qui est afficher en exécutant ce code :
Dans cet exemple, readlines()
lit toutes les lignes du fichier example.txt et les stocke dans la liste lignes. Ensuite, une boucle for est utilisée pour parcourir chaque élément de la liste et afficher son contenu.
Avantages de la fonction readlines() en Python
l’utilisation de la fonction readlines()
présente de nombreux avantages, tels que :
- Accès rapide aux lignes : En utilisant
readlines()
, toutes les lignes du fichier sont chargées en mémoire sous forme de liste. Cela permet un accès immédiat et rapide à n’importe quelle ligne en utilisant les index de la liste, ce qui est pratique lorsque vous avez besoin de lire ou de manipuler des lignes spécifiques du fichier plusieurs fois. - Simplicité de traitement : La fonction retourne les lignes du fichier sous forme de liste, ce qui simplifie le traitement des données. Vous pouvez facilement itérer sur les lignes, appliquer des transformations, ou effectuer des analyses sur l’ensemble du contenu du fichier sans avoir à gérer des lectures répétées.
- Manipulation facile des données : Une fois les lignes chargées dans une liste, vous pouvez utiliser toutes les fonctionnalités de manipulation des listes en Python, comme les tranches (slicing), les méthodes de recherche, ou les opérations de filtrage, pour traiter les données du fichier.
- Opérations en mémoire : Lorsque la taille du fichier est gérable, charger toutes les lignes en mémoire peut simplifier le traitement, car vous pouvez effectuer des opérations comme la recherche, le tri, ou les modifications sur l’ensemble des données en une seule fois, sans avoir à réouvrir le fichier.
- Pratique pour les petits fichiers : Pour les fichiers de taille modeste, readlines() offre une manière simple et efficace de lire toutes les lignes en une seule opération, facilitant ainsi le traitement et l’analyse sans complexité additionnelle.
Lire tout le contenu avec read() en Python
La fonction read()
en Python est utilisée pour lire le contenu entier d’un fichier. Lorsque vous ouvrez un fichier en mode lecture (‘r’), vous pouvez utiliser read()
pour extraire tout le texte contenu dans ce fichier sous forme de chaîne de caractères. Cette méthode est particulièrement utile lorsque vous avez besoin de traiter ou d’afficher le contenu complet d’un fichier d’un seul coup.
with open("file.txt", "r") as f:
contenu = f.read() # Lire tout le contenu du fichier
print(contenu) # Afficher le contenu du fichier
Ainsi voici ce qui est afficher en exécutant ce code :
Dans cet exemple :
- Ouverture du fichier: Le fichier file.txt est ouvert en mode lecture (‘r’) à l’aide de la fonction open().
- Lecture du contenu: La méthode read() est appelée sur l’objet fichier f. Elle lit tout le contenu du fichier et le stocke dans la variable contenu.
- Affichage du contenu: La fonction print(contenu) est utilisée pour afficher le contenu du fichier sur la console.
Avantages de la fonction read()
- Lecture complète du fichier : La fonction
read()
permet de lire l’intégralité du contenu d’un fichier en une seule opération. Cela est particulièrement utile lorsque vous avez besoin de traiter ou d’afficher le texte complet d’un fichier sans vous soucier de la gestion ligne par ligne. - Simplicité d’utilisation : En utilisant
read()
, vous obtenez tout le contenu du fichier sous forme de chaîne de caractères, ce qui simplifie les opérations de traitement ultérieures, telles que la recherche de texte, la manipulation de contenu ou l’affichage. - Facilité d’affichage : Grâce à
read(),
vous pouvez facilement afficher le contenu complet d’un fichier en utilisant simplement une fonction d’impression. Cela rend l’affichage ou la vérification rapide du contenu du fichier très pratique.
Ces avantages font de la fonction read()
un choix approprié pour les opérations nécessitant la lecture complète du contenu d’un fichier, surtout lorsque la taille du fichier est adéquate pour être chargée entièrement en mémoire.
Gérer les erreurs lors de la manipulation de fichiers en Python
Lors de la manipulation de fichiers en Python, il est important de gérer correctement les erreurs pour éviter que votre programme ne plante en cas de problème, tel que l’absence du fichier ou des permissions insuffisantes. Pour illustrer cela, commençons par un exemple simple où nous créons un fichier texte nommé fichier_erreur.txt, l’ouvrons en mode lecture, lisons son contenu, et affichons un message de fin de programme. Ce code fonctionne sans problème si le fichier existe déja.
with open("fichier_erreur.txt", "w") as fichier:
fichier.write("Ceci est un fichier pour tester la gestion des erreurs.")
with open("fichier_erreur.txt", "r") as fichier:
contenu = fichier.read() # Lire le contenu du fichier
print(contenu) # Afficher le contenu du fichier
En exécutant ce code, vous verrez que tout se passe bien si le fichier existe, et le message « Fin du programme » s’affichera à la fin comme il est afficher dans la figure suivante :
Maintenant si vous essayez d’ouvrir un fichier qui n’existe pas, Python lèvera une exception FileNotFoundError comme il est montré dans la figure suivante :
Pour éviter que le programme ne plante dans ce cas, vous pouvez utiliser la gestion des exceptions avec les blocs try et except. Voici comment vous pouvez gérer cette situation :
try:
# Essayer d'ouvrir un fichier qui n'existe pas
with open("fichier_inexistant.txt", "r") as fichier:
contenu = fichier.read()
print(contenu)
except FileNotFoundError:
# Gérer l'erreur si le fichier n'est pas trouvé
print("Erreur : Le fichier 'fichier_inexistant.txt' n'existe pas.")
finally:
print("Fin du programme.")
Dans ce programme :
- Bloc try : Contient le code qui tente d’ouvrir et de lire le fichier fichier_inexistant.txt.
- Bloc except FileNotFoundError : Est exécuté si une FileNotFoundError est levée, indiquant que le fichier n’a pas été trouvé.
- Bloc finally : S’exécute toujours, que l’erreur se soit produite ou non, et affiche « Fin du programme ».
En utilisant cette structure de gestion des erreurs, vous assurez que votre programme peut gérer les situations imprévues de manière élégante, sans se terminer brusquement en cas de problème. Cela améliore la robustesse et la fiabilité de votre code.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui. Découvrez des cours variés pour tous les niveaux !
Conclusion
La manipulation des fichiers en Python est une compétence essentielle pour gérer et traiter des données de manière efficace. Grâce aux fonctions comme open()
, read()
, et readline()
, vous pouvez lire, écrire et manipuler des fichiers avec flexibilité. En appliquant les bonnes pratiques, vous évitez les erreurs courantes et optimisez vos programmes.
Cette maîtrise vous permet de mieux contrôler les flux de données dans vos applications. La manipulation fichiers Python est donc incontournable pour tout développeur souhaitant travailler avec des fichiers.