20. Fichiers CSV#
Nous avons vu des méthodes pour lire et écrire des fichiers CSV. Elles ont des intérêts pédagogiques car elles vous montrent le fonctionnement de l’ouverture/fermeture de fichiers et vous font travailler l’algorithmique. Ceci étant, à la longue, elles sont relativement pénibles à mettre en oeuvre. Nous allons donc voir comment, avec des dictionnaires et le module csv
, on peut faciliter tout cela.
Le fichier presidents.txt
contient les informations suivantes.
Annee;Prenom;Nom
1959;Charles;de Gaulle
1969;Georges;Pompidou
1974;Valéry;Giscard d'Estaing
1981;François;Mitterrand
1995;Jacques;Chirac
2007;Nicolas;Sarkozy
2012;François;Hollande
2017;Emmanuel;Macron
20.1. Lecture#
Voici comment importer ces données.
import csv
with open("../_static/datas/presidents.txt", mode="r") as f :
reader = csv.DictReader(f, delimiter=";")
for row in reader:
print(row)
{'Annee': '1959', 'Prenom': 'Charles', 'Nom': 'de Gaulle'}
{'Annee': '1969', 'Prenom': 'Georges', 'Nom': 'Pompidou'}
{'Annee': '1974', 'Prenom': 'Valéry', 'Nom': "Giscard d'Estaing"}
{'Annee': '1981', 'Prenom': 'François', 'Nom': 'Mitterrand'}
{'Annee': '1995', 'Prenom': 'Jacques', 'Nom': 'Chirac'}
{'Annee': '2007', 'Prenom': 'Nicolas', 'Nom': 'Sarkozy'}
{'Annee': '2012', 'Prenom': 'François', 'Nom': 'Hollande'}
{'Annee': '2017', 'Prenom': 'Emmanuel', 'Nom': 'Macron'}
On ouvre le fichier president.txt
avec la fonction open
comme on le fait toujours. On passe le fichier ouvert à la fonction csv.DictReader
qui permet d’analyse le fichier comme du csv
. On obtient alors un itérateur que l’on peut utiliser dans une boucle for.
Chaque ligne lu est analysé automatiquement (en fonction du délimiteur, ici ;
) et on récupère un ensemble de dictionnaires.
Par défaut, les noms de colonnes sont définies à partir de la première ligne du fichier csv. On peut changer se comportement en précisant le paramètre fieldnames
qui prend une liste de chaines de caractères. Attention alors à la première ligne…
with open("../_static/datas/presidents.txt", mode="r") as f :
reader = csv.DictReader(f, delimiter=";", fieldnames=["Un", "Deux", "Trois"])
for row in reader:
print(row)
{'Un': 'Annee', 'Deux': 'Prenom', 'Trois': 'Nom'}
{'Un': '1959', 'Deux': 'Charles', 'Trois': 'de Gaulle'}
{'Un': '1969', 'Deux': 'Georges', 'Trois': 'Pompidou'}
{'Un': '1974', 'Deux': 'Valéry', 'Trois': "Giscard d'Estaing"}
{'Un': '1981', 'Deux': 'François', 'Trois': 'Mitterrand'}
{'Un': '1995', 'Deux': 'Jacques', 'Trois': 'Chirac'}
{'Un': '2007', 'Deux': 'Nicolas', 'Trois': 'Sarkozy'}
{'Un': '2012', 'Deux': 'François', 'Trois': 'Hollande'}
{'Un': '2017', 'Deux': 'Emmanuel', 'Trois': 'Macron'}
20.2. Écriture#
Là encore, l’export des données se trouve bien facilité. Vous devriez être convaincu que les dictionnaires sont un outil très performent.
import csv
with open('../_static/datas/presidents_out.txt', 'w', newline='') as csvfile:
fieldnames = ['Prenom', 'Nom']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Prenom': 'Charles', 'Nom': 'de Gaulle'})
writer.writerow({'Prenom': 'Georges', 'Nom': 'Pompidou'})
20.3. Exercice#
Reprenons maintenant la carte des plus grande villes de France, nous devrions pouvoir tout reprendre pour intégrer les dictionnaires et la lecture/écriture avec le module csv
.