Contactez-nous

Ouvrir, lire et écrire des fichiers texte

Apprenez à manipuler des fichiers texte en Python. Découvrez la fonction open() et ses modes ('r', 'w', 'a', 'x', 'b', 't'), comment lire un fichier ligne par ligne ou en entier, comment écrire dans un fichier, et comment gérer les erreurs d'ouverture/fer

La fonction `open()` et les modes d'ouverture : établissez la connexion

Pour interagir avec un fichier en Python, vous devez d'abord l'ouvrir. Vous utilisez la fonction intégrée `open()` pour cela. `open()` prend en argument le chemin du fichier (relatif ou absolu), et renvoie un objet fichier (également appelé descripteur de fichier ou file handle).

`open()` prend également un deuxième argument, le mode d'ouverture, qui spécifie comment vous voulez interagir avec le fichier. Les modes d'ouverture les plus courants sont :

  • `'r'` : lecture (mode par défaut). Le fichier doit exister.
  • `'w'` : écriture. Si le fichier existe, son contenu est écrasé. Si le fichier n'existe pas, il est créé.
  • `'a'` : ajout. Si le fichier existe, les données que vous écrivez sont ajoutées à la fin du fichier. Si le fichier n'existe pas, il est créé.
  • `'x'` : création exclusive. Le fichier ne doit pas exister. Si le fichier existe, une exception `FileExistsError` est levée.

Vous pouvez combiner ces modes avec `'b'` pour les fichiers binaires (nous verrons cela plus tard), et avec `'t'` pour les fichiers texte (c'est le mode par défaut, donc vous n'avez généralement pas besoin de le spécifier).

Par exemple : `f = open('mon_fichier.txt', 'r')` ouvre le fichier `mon_fichier.txt` en mode lecture. `f = open('nouveau_fichier.txt', 'w')` ouvre (ou crée) le fichier `nouveau_fichier.txt` en mode écriture.

Nous verrons comment utiliser `open()` avec les différents modes d'ouverture, et comment spécifier le chemin du fichier.

Lire un fichier : ligne par ligne ou en entier

Une fois que vous avez ouvert un fichier en mode lecture (`'r'`), vous pouvez lire son contenu. Il existe plusieurs méthodes pour cela :

  • `read()` : lit tout le contenu du fichier et le renvoie sous forme d'une seule chaîne de caractères. Si vous appelez `read()` une deuxième fois, il renverra une chaîne vide, car vous avez atteint la fin du fichier.
  • `readline()` : lit une seule ligne du fichier et la renvoie sous forme d'une chaîne de caractères (en incluant le caractère de fin de ligne ``). Si vous appelez `readline()` une deuxième fois, il renverra la ligne suivante, et ainsi de suite. Lorsque vous atteignez la fin du fichier, `readline()` renvoie une chaîne vide.
  • `readlines()` : lit toutes les lignes du fichier et les renvoie sous forme d'une liste de chaînes de caractères (chaque chaîne étant une ligne du fichier).

Vous pouvez également parcourir les lignes d'un fichier directement avec une boucle `for` : `for ligne in f: print(ligne)`. C'est souvent la manière la plus simple et la plus efficace de lire un fichier ligne par ligne.

Nous verrons des exemples d'utilisation de ces différentes méthodes de lecture, et comment choisir la méthode la plus adaptée à vos besoins.

Ecrire dans un fichier : ajoutez ou remplacez du contenu

Pour écrire dans un fichier, vous devez l'ouvrir en mode écriture (`'w'`) ou en mode ajout (`'a'`).

Vous utilisez la méthode `write()` de l'objet fichier pour écrire des données dans le fichier. `write()` prend en argument une chaîne de caractères. Contrairement à `print()`, `write()` n'ajoute pas automatiquement de caractère de fin de ligne (``). Si vous voulez écrire plusieurs lignes, vous devez ajouter vous-même les caractères de fin de ligne.

Si vous ouvrez un fichier en mode écriture (`'w'`), le contenu existant du fichier est écrasé. Si vous ouvrez un fichier en mode ajout (`'a'`), les données que vous écrivez sont ajoutées à la fin du fichier.

Il est important de noter que les données ne sont pas forcément écrites immédiatement sur le disque lorsque vous appelez `write()`. Python peut mettre les données en mémoire tampon (buffer) pour améliorer les performances. Pour forcer l'écriture sur le disque, vous pouvez appeler la méthode `flush()`, ou fermer le fichier (ce qui appelle implicitement `flush()`).

Nous verrons des exemples d'utilisation de `write()` pour écrire dans un fichier, et comment gérer les modes écriture et ajout.

Fermer un fichier : libérez les ressources

Lorsque vous avez fini d'interagir avec un fichier, il est important de le fermer. Cela libère les ressources système associées au fichier (mémoire, descripteur de fichier), et s'assure que toutes les données ont bien été écrites sur le disque.

Vous fermez un fichier en appelant la méthode `close()` de l'objet fichier : `f.close()`.

Si vous oubliez de fermer un fichier, Python le fermera automatiquement lorsque le programme se termine, ou lorsque l'objet fichier est détruit par le ramasse-miettes. Cependant, il est préférable de fermer explicitement les fichiers dès que vous n'en avez plus besoin, pour éviter les problèmes potentiels (perte de données, corruption de fichier, limitation du nombre de fichiers ouverts simultanément).

La meilleure façon de s'assurer qu'un fichier est toujours fermé, même en cas d'erreur, est d'utiliser l'instruction `with` (gestionnaire de contexte), que nous avons vue dans un chapitre précédent. `with open('mon_fichier.txt') as f: ...` ouvre le fichier, exécute le bloc de code à l'intérieur du `with`, puis ferme automatiquement le fichier, même si une exception se produit.

Nous verrons des exemples d'utilisation de `close()` et de `with`, et nous discuterons des avantages de `with`.

Gérer les erreurs d'ouverture/fermeture de fichier : anticipez les problèmes

Lorsque vous manipulez des fichiers, des erreurs peuvent se produire. Par exemple, le fichier que vous essayez d'ouvrir peut ne pas exister, vous pouvez ne pas avoir les permissions nécessaires pour lire ou écrire le fichier, ou le disque peut être plein.

Il est important d'anticiper ces erreurs et de les gérer correctement, pour éviter que votre programme ne plante.

Vous pouvez utiliser les blocs `try...except` pour capturer les exceptions liées aux opérations sur les fichiers. Les exceptions les plus courantes sont :

  • `FileNotFoundError` : levée lorsque vous essayez d'ouvrir un fichier qui n'existe pas (en mode lecture).
  • `PermissionError` : levée lorsque vous n'avez pas les permissions nécessaires pour accéder au fichier.
  • `IOError` (ou `OSError` en Python 3) : levée pour diverses erreurs d'entrée/sortie.

Nous verrons des exemples de gestion de ces exceptions, et comment afficher des messages d'erreur clairs à l'utilisateur.