LyCode Lab

Chapitre 0 : Importer une table, CSV, indexation

Du fichier CSV à la table

Les données du monde réel arrivent presque toujours dans des fichiers. Le plus simple et le plus répandu pour des tableaux de données est le format CSV. Dans ce chapitre, tu vas apprendre à lire un fichier CSV avec Python pour en faire une table que ton programme peut parcourir, filtrer et trier.

Au programme de NSI : Traitement de données en tables : Indexation de tables. Importer une table depuis un fichier texte tabulé ou un fichier CSV.

Un fichier CSV, c'est du texte

CSV signifie Comma Separated Values : des valeurs séparées par des virgules. C'est un simple fichier texte où chaque ligne est un enregistrement (ici, un visiteur du musée) et où les valeurs d'une ligne sont séparées par une virgule. La première ligne contient les descripteurs (les noms des colonnes).

visiteurs.csv : Le registre des visiteurs du musée de Port-Noir, en texte brut (à gauche) et en table (à droite).
nom,prenom,age,ville,entree
Durand,Armand,45,Brest,09:15
Martin,Julie,17,Quimper,09:40
Bernard,Karim,29,Brest,10:05
Petit,Sofia,34,Rennes,10:20
Robert,Lucas,16,Brest,10:35
Richard,Emma,52,Nantes,11:00
Moreau,Hugo,23,Quimper,11:10
Simon,Lina,41,Rennes,11:25
Laurent,Noah,19,Brest,11:50
Lefebvre,Jade,38,Nantes,12:05
Michel,Tom,29,Quimper,12:30
Garcia,Ines,17,Rennes,13:00

Une table est donc une collection d'objets (les lignes) qui partagent les mêmes descripteurs (les colonnes). C'est exactement la structure d'un tableur... ou d'un fichier CSV.

Lire un fichier avec Python

On ouvre un fichier avec open. L'instruction with le referme automatiquement à la fin du bloc. On précise l'encodage utf-8 pour que les accents soient bien lus. La méthode readlines() renvoie la liste des lignes du fichier.

Lire un fichier ligne par ligne
with open('visiteurs.csv', encoding='utf-8') as f:
    lignes = f.readlines()

print(len(lignes))
print(lignes[0])
print(lignes[1].strip().split(','))

Python fournit pour cela le module csv. csv.DictReader lit chaque ligne comme un dictionnaire dont les clés sont les descripteurs de la première ligne. En faisant list(...), on obtient une liste de dictionnaires : notre table.

Importer une table avec le module csv
import csv

with open('visiteurs.csv', encoding='utf-8') as f:
    table = list(csv.DictReader(f))

print(len(table))
print(table[0])
print(table[0]['nom'])

Tout est du texte

Convertir une valeur lue
import csv

with open('visiteurs.csv', encoding='utf-8') as f:
    table = list(csv.DictReader(f))

age = table[0]['age']
print(age, type(age))
print(int(age) + 1)

Séparateur et encodage

Tous les fichiers CSV ne se ressemblent pas. Les tableurs français enregistrent souvent avec un point-virgule comme séparateur (la virgule sert de virgule décimale). On l'indique avec delimiter=';'. Et si les accents s'affichent mal, c'est le plus souvent un problème d'encodage : on utilise encoding='utf-8'.

Un fichier séparé par des points-virgules
import csv

with open('visiteurs_pv.csv', encoding='utf-8') as f:
    table = list(csv.DictReader(f, delimiter=';'))

print(table[0])

À toi de jouer : Exercice guidé

Complète le programme pour importer visiteurs.csv dans une liste de dictionnaires nommée table. La variable nombre contient ensuite le nombre de visiteurs. Remplace chaque ___.

Passer à l'énigme : L'enquête commence