Adloun

Un CSV produit par un tableur français emploie le point-virgule

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 6 — Traiter des données en tables · Importer, convertir, contrôler

Énoncé

Un CSV produit par un tableur français emploie le point-virgule. Le lire avec le bon séparateur, puis avec la virgule. Que rend importer dans le second cas — une erreur, ou autre chose ?

Corrigé


nom;classe;moyenne
Nour;1G3;15,5
Camille;1G1;12,0

importer("pv.csv", ";")     # descripteurs : ['nom', 'classe', 'moyenne']
importer("pv.csv", ",")     # descripteurs : ['nom;classe;moyenne', None]

Aucune erreur. Avec la virgule, le fichier est lu comme une table à une colonne dont le descripteur est la chaîne 'nom;classe;moyenne'. La ligne de données, elle, se coupe en deux à cause de la virgule décimale de 15,5 : la première moitié 'Nour;1G3;15' va sous ce descripteur, et la seconde échoue sous la clé None que csv.DictReader réserve aux champs en trop.

Le contrôle qui l'attrape. Un seul descripteur pour un fichier qui devait en avoir trois est le signe le plus sûr d'un mauvais séparateur. Deux lignes suffisent :


t = importer(chemin, sep)
assert len(descripteurs(t)) > 1, "separateur probablement faux"
assert None not in descripteurs(t), "champs en trop : separateur faux"

Et la virgule décimale ? Elle interdit, dans ce fichier, d'employer la virgule comme séparateur : c'est bien pourquoi le tableur a choisi le point-virgule. Il reste à convertir la colonne avec le vers_float de la banque de TD.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.