version 1.0.1, dernière mise à jour le 25 novembre 2021.
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 :
closed
est un booléen, c'est-à-dire une variable ne pouvant prendre que les valeurs True
ou False
. Cette propriété vaut False
si le fichier est ouvert, True
s'il est fermé
encoding
renvoie l'encodage du fichier (par exemple UTF-8)
mode
, le mode d'ouverture du fichier
name
renvoie le nom du fichier
Il y a d'autres attributs, d'usage plus rare.
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)
Nous avons vu comment ouvrir un fichier en lecture ; mais il est aussi possible de spécifier d'autres modes d'ouverture :
Mode |
Description |
---|---|
|
lecture seule |
|
lecture et écriture. Si le fichier n'existe pas, il y a un message d'erreur |
|
écriture seule, à partir du début du fichier |
|
écriture et lecture, à partir du début du fichier. Si le fichier n'existe pas, il est créé |
|
ajout de contenu à la fin du fichier |
|
ajout de contenu à la fin du fichier et lecture |
|
création du fichier |
Table 1. Signification des sélecteurs de mode pour l'ouverture des fichiers
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.
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"]
.
Le mode d'ouverture x
permet de créer un fichier vide.
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"])
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.")
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
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
.
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.
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.
Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.