N.S.I. WorkSpace Notions,P-Th-C,Première C1a – Notion | Fichier au format ‘CSV’

C1a – Notion | Fichier au format ‘CSV’

Categories:

Définition

‘CSV’ signifie : ‘Coma Separated Values’, soit valeurs séparées par des virgules.

La définition du format csv figure dans une RFC (Request for Comments) : RFC 4180

Caractéristiques

Un fichier au format ‘csv’ est d’abord un fichier de type ‘texte’.

Mais ce qui le caractérise c’est qu’il permet de sauvegarder les données d’une table.

Chaque enregistrement d’une table sera sauvegardée sous la forme d’une ligne de ‘texte’.

Quel caractère de fin de ligne ?

L’encodage d’un caractère de fin de ligne (de retour à la ligne) et son écriture dans un langage de programmation dépendent du système d’exploitation :

OS (système d’exploitation)CaractèreEncodage ASCIIEncodage UnicodeDans la plupart des langages de programmation…
UNIX / LinuxCR
(Carriage Return)
(0D)16
(13)10
000D\r
MacOSLF (Line Feed)(0A)16
(10)10
000A\n
DOS/WindowsCRLF
(Carriage Return Line Feed)
0D 0A
(13)10 (10)10
000D 000A\r\n
Pour en savoir plus : https://fr.wikipedia.org/wiki/Fin_de_ligne

Quel caractère de séparation des données ?

Les valeurs d’un enregistrement sont séparées les unes des autres par une virgule – caractère par défaut – mais parfois par un point-virgule ou par un caractère de tabulation-droite : dans ce dernier cas le format de fichier est souvent nommé ‘TSV‘ (Tab Separated Values).

Soit la table suivante :

PrénomNOMDate de naissance (AAAA-MM-JJ ou YYYY-MM-DD)
AbelAuboisdormant2002-12-10
AlainProvist2004-01-14
AndréNaline2003-04-05
CélineÉvitable1997-06-23

Les données de cette table seront sauvegardées de cette façon dans un fichier ‘csv’ avec un OS ©MS-Windows :

'Prénom,NOM,Date de naissance (AAAA-MM-JJ ou  YYYY-MM-DD)\r\nAbel,Auboisdormant,2002-12-10\r\nAlain,Provist,2004-01-14\r\nAndré,Naline,2003-04-05\r\nCéline,Évitable,1997-06-23'

Tester…

Dans la console Python…

Copier le texte ci-dessus et dans une console Python entrer et valider l’instruction suivante :

print('Prénom,NOM,Date de naissance (AAAA-MM-JJ ou  YYYY-MM-DD)\r\nAbel,Auboisdormant,2002-12-10\r\nAlain,Provist,2004-01-14\r\nAndré,Naline,2003-04-05\r\nCéline,Évitable,1997-06-23')

Dans le « Bloc-notes » de (c)MS Windows…

 Ouvrir le 'bloc-notes' ©MS-Windows.
 Copier le texte qui suit : 
Prénom,NOM,Date de naissance (AAAA-MM-JJ ou  YYYY-MM-DD)
Abel,Auboisdormant,2002-12-10
Alain,Provist,2004-01-14
André,Naline,2003-04-05
Céline,Évitable,1997-06-23
 Coller le texte dans le 'bloc-notes'.
 Sauvegarder sur le bureau le document avec le nom 'test.csv'.
 Sur le bureau, faire un clic droit sur le fichier 'test.csv' et sélectionner la commande 'ouvrir avec...' et choisir 'libre office calc'.
 Décrire ce que se passe. Faire des captures d'écran.

Quelques cas particuliers…

Données manquantes

Si une donnée est manquante et en l’absence de valeurs par défaut, il convient de mettre alors deux virgules successives :

PrénomNOMDate de naissance (AAAA-MM-JJ ou YYYY-MM-DD)
AbelAuboisdormant2002-12-10
AlainProvist2004-01-14
AndréNaline2003-04-05
CélineÉvitable1997-06-23
Colette2001-11-03

La sauvegarde sera :

Prénom,NOM,Date de naissance (AAAA-MM-JJ ou  YYYY-MM-DD)
Abel,Auboisdormant,2002-12-10
Alain,Provist,2004-01-14
André,Naline,2003-04-05
Céline,Évitable,1997-06-23
Colette,,2001-11-03

Données contenant une virgule…

Le choix du caractère utilisé comme séparateur peut dépendre du contenu des données.
Par exemple dans le cas suivant :

PrénomNOMDate de naissance (AAAA-MM-JJ ou YYYY-MM-DD)Lieu de naissance (Département et Ville)
AbelAuboisdormant2002-12-10Maine-et-Loire, Angers
AlainProvist2004-01-14Mayenne, Laval
AndréNaline2003-04-05Sarthe, Le Mans
CélineÉvitable1997-06-23Loire-Atlantique, Nantes
Colette2001-11-03Vendée

Il est plutôt pertinent de choisir le point-virgule comme caractère de séparation.

Prénom;NOM;Date de naissance (AAAA-MM-JJ ou  YYYY-MM-DD);Lieu de naissance (Département et Ville)
Abel;Auboisdormant;2002-12-10;Maine-et-Loire, Angers
Alain;Provist;2004-01-14;Mayenne, Laval
André;Naline;2003-04-05;Sarthe, Le Mans
Céline;Évitable;1997-06-23;Loire-Atlantique, Nantes
Colette;;2001-11-03;Vendée

S’entraîner…

Sujet 1 - Sérialisation - Soit une table implémentée sous la forme d'une liste de listes en Python.
Écrire un programme qui permet de convertir cette liste de liste sous la forme d'une chaîne de caractères au format 'csv'.
Coups de pouce…

Coup de pouce 1
Se renseigner sur la fonction chr() et sur la valeur décimale des caractères « CR » (\r) et « LF » (\n)
Coup de pouce 2
Analyser le code qui suit :

>>> "aer"+chr(13)+chr(10)+"fgh"
'aer\r\nfgh'

>>> print('aer\r\nfgh')
aer
fgh
Sujet 2 - Désérialisation - Soit une chaîne de caractères formatées aux normes 'csv'.
Écrire un programme en Python qui permet de convertir cette chaîne de caractères en liste de listes.
Coups de pouce…

Coup de pouce 1
Se renseigner sur la méthode split() qui s’applique à une chaine de caractères : str.split(car)
Coup de pouce 2
Analyser le code qui suit :

In [1]: csv_text = "abc,def,ghi\njkl,mno,pqr\nstu,vwx,yz%"
In [2]: csv_text = csv_text.split(chr(10))
In [3]: csv_text
Out[3]: ['abc,def,ghi', 'jkl,mno,pqr', 'stu,vwx,yz%']
In [4]: csv_text[0] = csv_text[0].split(",")
In [5]: csv_text
Out[5]: [['abc', 'def', 'ghi'], 'jkl,mno,pqr', 'stu,vwx,yz%']

Article sous licence << Cliquez pour plus d’informations <<