Cours de Python - Lecture et écriture de fichier

version 1.0.1, dernière mise à jour le 25 novembre 2021.

   

Table des matières (TdM)

  1. I. Ouverture de fichier
    1. Ouverture simple
    2. Ouverture avec with
    3. Options d'ouverture
  1. II. Lecture de fichier
    1. Lecture avec read()
    2. Lecture ligne par ligne
  1. III. Écriture de fichier
    1. Création d'un fichier
    2. Ajout à la fin d'un fichier
    3. Remplacement d'un contenu existant
    4. Exercice : Lecture et écriture de fichier
  1. IV. Manipulation d'un fichier CSV : le module csv
    1. Rappel : structure d'un fichier CSV
    2. Le module csv
      1. Introduction
      2. Écriture de fichier CSV
      3. Lecture de fichier CSV
    3. Exercice : Lecture et écriture de fichier CSV

Retour au menu

Contenu du cours

I. Ouverture de fichier

1. Ouverture simple

La manière la plus simple, mais pas forcément la plus pratique, d'ouvrir un fichier est d'utiliser la fonction open. On peut ensuite lire le fichier, mais il faut ensuite fermer le fichier une fois la lecture terminée. On écrira par exemple…

fichier = open("exemple.txt", "r")
contenu = fichier.read()
print(contenu)
fichier.close()

On affichera ainsi le contenu du fichier exemple.txt. Le premier paramètre de la fonction open est une chaîne de caractères contenant le nom complet du fichier à ouvrir, y compris le chemin por y accéder depuis le script Python. Le second paramètre est une autre chaîne de caractères qui précise le mode d'ouverture du fichier. Ici, "r" signifie que l'on souhaite simplement lire (read) le fichier. Nous y reviendrons.

L'objet fichier possède quelques attributs :

Il y a d'autres attributs, d'usage plus rare.

>Retour à la TdM

2. Ouverture avec with

Un inconvénient de la méthode d'ouverture précédente est qu'il ne faut pas oublier de fermer le fichier après l'avoir lu. Il est possible d'automatiser le processus, en utilisant l'instruction with. L'exemple précédent devient :

with open("exemple.txt", "r") as fichier :
  contenu = fichier.read()
print(contenu)

>Retour à la TdM

3. Options d'ouverture

Nous avons vu comment ouvrir un fichier en lecture ; mais il est aussi possible de spécifier d'autres modes d'ouverture :

Mode

Description

r

lecture seule

r+

lecture et écriture. Si le fichier n'existe pas, il y a un message d'erreur

w

écriture seule, à partir du début du fichier

w+

écriture et lecture, à partir du début du fichier. Si le fichier n'existe pas, il est créé

a

ajout de contenu à la fin du fichier

a+

ajout de contenu à la fin du fichier et lecture

x

création du fichier

Table 1. Signification des sélecteurs de mode pour l'ouverture des fichiers

>Retour à la TdM

II. Lecture de fichier

1. Lecture avec read()

Comme évoqué dans l'exemple ci-dessus, on peut lire le fichier avec la méthode read. Cette méthode stocke le contenu du fichier dans une seule chaîne de caractères. Si le fichier a 30000 caractères, on se retrouve donc avec une chaîne de 30000 caractères de long, ce qui peut être assez lourd.

On peut donc cependant choisir de ne lire qu'un nombre donné de caractères, en spécifiant un paramètre lors de l'appel de la méthode. Ainsi, contenu=fichier.read(42) va stocker dans la variable contenu les 42 premiers caractères du fichier. Attention, à ce moment Python a placé une sorte de signet dans le fichier. Si on fait ensuite contenu2=fichier.read(21), la chaîne de caractères contenu2 va contenir les 21 caractères suivants, et pas les 21 premiers du fichier.

>Retour à la TdM

2. Lecture ligne par ligne

Si on connaît le nombre de lignes d'un fichier et leur longueur, on peut utiliser la méthode read vue ci-dessus pour stocker chaque ligne dans une variable, à l'aide d'une boucle for ou while. Cependant, il y a plus efficace avec la méthode readlines. Si le fichier est structuré en lignes (chaque ligne finissant par le caractère « fin de ligne » \n) alors contenu=fichier.readlines() renvoie une liste de chaînes de caractères, dont chaque élément est une ligne du fichier. Il n'est ainsi pas nécessaire de connaître a priori le nombre de lignes du fichier à lire. La méthode readline renvoie une seule ligne du fichier, en plaçant le signet au début de la ligne suivante.

Attention, les chaînes de caractères ainsi lues se terminent par le caractère de fin de ligne \n. On peut supprimer ce caractère en appliquant la méthode strip. Ainsi…

with open("exemple.txt", "r") as fichier :
  contenu = fichier.readlines()

print(contenu)

contenu2=[]
for ligne in contenu:
  contenu2.append(ligne.strip())

print(contenu2)

Si contenu affiche ["ligne1\n", "ligne2\n", "ligne3\n"], alors contenu2 affichera ["ligne1", "ligne2", "ligne3"].

>Retour à la TdM

III. Écriture de fichier

1. Création d'un fichier

Le mode d'ouverture x permet de créer un fichier vide.

>Retour à la TdM

2. Ajout à la fin d'un fichier

Le mode d'ouverture a permet d'ajouter du contenu à la fin d'un fichier. Pour cela, on va plus utiliser la méthode read mais la méthode write. Par exemple, on écrira…

with open("exemple.txt", "a") as fichier :
  fichier.write("Autre ligne")

On peut aussi ajouter plusieurs lignes avec la méthode writelines, qui prend une liste de chaînes de caractères en paramètre. Il faut cependant penser à ajouter le caractère \n à la fin de chaque nouvelle ligne :

with open("exemple.txt", "a") as fichier :
  fichier.writelines(["Autre ligne\n", "Encore une autre\n", "Enfin une troisième\n"])

>Retour à la TdM

3. Remplacement d'un contenu existant

Pour remplacer l'intégralité d'un fichier, on utilise le mode d'ouverture w :

with open("exemple.txt", "w") as fichier :
  fichier.write("Tout le contenu a disparu, sauf cette ligne.")

>Retour à la TdM

Exercice 1. Lecture et écriture de fichier

Énoncé
Correction

IV. Manipulation d'un fichier CSV : le module csv

1. Rappel : structure d'un fichier CSV

Le format CSV (pour Comma Separated Values) est un format standardisé de stockage de données sous forme de tableau. Chaque colonne est séparée par un délimiteur (d'habitude une virgule, d'où le nom du format). À chaque ligne correspond un ensemble de colonnes, à la manière d'un tableur. Par exemple…

Aaron, 02/11/1979, théâtre
Adèle, 18/03/1988, peinture
Sacha, 14/02/1972, théâtre
Pierre, 24/12/1999, théâtre
Romain, 23/08/1967, chant
Arnaud, 26/03/1972, chant
Clémentine, 22/08/1956, sculpture
Émilie, 04/03/2000, sculpture
Markus, 06/02/1988, chant
Alicia, 19/01/1970, peinture

>Retour à la TdM

2. Le module csv

a. Introduction

Même s'il est tout à fait possible de gérer un fichier CSV avec les méthodes et propriétés communes de Python, le module csv permet de le faire plus facilement.

Pour le charger, il suffit d'ajouter au début du script import csv.

b. Écriture de fichier CSV

Supposons que l'on doive créer le fichier CSV de l'exemple précédent. On utilisera la méthode writerows :

import csv

liste = [["Aaron", "02/11/1979", "théâtre"], ["Adèle", "18/03/1988", "peinture"], ["Sacha", "14/02/1972", "théâtre"], ["Pierre", "24/12/1999", "théâtre"], ["Romain", "23/08/1967", "chant"], ["Arnaud", "26/03/1972", "chant"], ["Clémentine", "22/08/1956", "sculpture"], ["Émilie", "04/03/2000", "sculpture"], ["Markus", "06/02/1988", "chant"], ["Alicia", "19/01/1970", "peinture"]]

with open("liste.csv", "w", newline="") as fichier :
  writer = csv.writer(fichier)
  writer.writerows(liste)

On peut aussi écrire ligne par ligne :

with open("liste.csv", "w", newline="") as fichier :
  writer = csv.writer(fichier)
  for line in liste :
    writer.writerow(line)

Lors de l'ouverture du fichier, il faut indiquer le paramètre newline="", sinon des lignes supplémentaires sont ajoutées. D'autres options sont possibles, mais pour une utilisation simple comme ici ne sont pas nécessaires.

c. Lecture de fichier CSV

La lecture d'un fichier CSV est aussi simple que son écriture :

import csv

with open("liste.csv", "r", newline="") as fichier :
  lignes = csv.reader(fichier)

lignes est alors une liste de liste de chaînes de caractères, chaque sous-liste correspondant à une ligne du fichier.

>Retour à la TdM

Exercice 1. Lecture et écriture de fichier CSV

Énoncé
Correction

Historique de ce document

Conditions d'utilisation et licence

Creative Commons License
Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

Retour au menu