Aller au contenu

📑 Les fichiers csv et json

Découverte

Le site data.gouv propose de nombreux jeux de données en libre accès.

Les fichiers correspondants sont souvent proposés aux formats

  • csv pour Comma Separated Values,
  • json pour JavaScript Object Notation.

Ces deux formats de fichiers permettent de présenter des données textuelles. Voici par exemple les mêmes informations présentées dans chacun des formats :

  • au format csv (le fichier s'appelle amis.csv):

    📑 Données CSV
    nom,âge,ville,passion
    Jean,26,Paris,VTT
    Marion,28,Lyon,badminton
    
  • au format json (le fichier s'appelle amis.json):

    { "amis": [
        {"nom": "Jean","âge": 26,"ville": "Paris","passion": "VTT"},
        {"nom": "Marion","âge": 28,"ville": "Lyon","passion": "badminton"},
              ]
    }
    

Nous travaillerons désormais avec les fichiers csv. L'exemple précédent permet de remarquer plusieurs choses :

  • un fichier csv contient des données textuelles,

  • les données sont organisées en lignes,

  • la première ligne regroupe le nom des descripteurs (il y en a quatre ici : nom, âge, ville et passion),

  • les autres lignes contiennent des enregistrements (il y en a deux ici : Jean,26,Paris,VTT et Marion,28,Lyon,badminton),

  • au sein de chaque ligne, les valeurs sont délimitées par un séparateur (ici le caractère ","),

  • les données peuvent être de types différents. Ici le nom, la ville et la passion sont des chaînes de caractères, l'âge un entier.

Attention

La réalité n'est pas aussi simple :

  • il arrive que la première ligne ne contienne pas les entêtes. Ils peuvent être listés dans un fichier annexe ou... perdus !

  • on trouve parfois une seconde ligne contenant les types des données (entier, texte...).

  • le séparateur n'est pas toujours une virgule. Il est courant que l'on trouve des ";" dans les fichiers français car la virgule est utilisée comme séparateur décimal.

Premiers contacts

On considère les deux fichiers csv ci-dessous (on n'en donne que les trois première lignes) :

📑 Données CSV
geo_point_2d;nb_equipement;commune;cp
(47.3392380011,0.7162219998);1;Chambray-lès-Tours;37170
(47.3300100011,0.6120900019);5;Ballan-Miré;37510
📑 Données CSV
session,academie,sexe,diplome_specialite,nombre_d_inscrits,nombre_d_admis_totaux
INT,TEXT,TEXT,TEXT,INT,INT
2021,AIX-MARSEILLE,FILLES,BAC PRO AG 21302 GEST MILIEUX NATURELS FAUNE,16,13

Cochez la ou les bonnes réponses.

  • Le séparateur du fichier petanque.csv est la virgule
  • Le fichier petanque.csv compte quatre descripteurs
  • Le séparateur du fichier bac.csv est la virgule
  • INT est un descripteur du fichier bac.csv
  • ❌ Le séparateur du fichier petanque.csv est le point-virgule
  • ✅ Le fichier petanque.csv compte bien quatre descripteurs
  • ✅ Le séparateur du fichier bac.csv est bien la virgule
  • ❌ INT est un type de données
Problème !

On propose ci-dessous un extrait d'un fichier csv. Identifiez les trois problèmes présents :

📑 Données CSV
nom,prenom,identifiant;mdp,derniere_connexion
Clark,Sarah,sclark,k012345,20230105,
Mapple,Marc,marc.mapple,20221231
Solution
  1. Le séparateur n'est pas constant : il y a un point-virgule dans la première ligne
  2. Il y a une virgule en trop en fin de deuxième ligne
  3. Il manque un champs sur la troisième ligne

On pourrait aussi noter le gros problème qui consiste à stocker les mots de passe des utilisateurs en clair dans un fichier !

Autres formats...

Les fichiers csv et json ne sont pas les seuls formats permettant de conserver des données.

On peut aussi retenir le format xml pour eXtensible Markup Language qui utilise des balises au même titre que le html :

📑 Données XML
<?xml version="1.0" encoding="UTF-8"?>
<amis>
    <personne>
        <nom>Jean</nom>
        <âge>26</âge>
        <ville>Paris</ville>
        <passion>VTT</passion>
    </personne>
    <personne>
        <nom>Marion</nom>
        <âge>28</âge>
        <ville>Lyon</ville>
        <passion>badminton</passion>
    </personne>
</amis>

Création

On l'a dit, les fichiers csv et json sont des fichiers « texte » classique. Il est donc possible de les créer avec un simple éditeur de texte.

Création d'un fichier csv

« Créer » un fichier csv

On souhaite « créer » un fichier csv recensant les jours fériés en France durant l'année 2023.

Afin de rester dans l'interface proposée par ce site nous travaillerons dans un éditeur Python.

Pour de vrai !

Au lieu de travailler dans l'éditeur Python proposé ci-dessous, vous pouvez utiliser votre propre éditeur et réellement créer le fichier csv en l'enregistrant avec l'extension .csv. Vous pourrez ensuite le lire comme vu plus haut. Remarquez qu'un "copié/collé" de cet écran peut vous faire gagner du temps. Il faudra juste le transformer un peu ...

Ces jours sont présentés dans le tableau ci-dessous :

motif jour numero mois
Jour de l'an dimanche 1 janvier
Lundi de Pâques lundi 10 avril
Fête du travail lundi 1 mai
Victoire 1945 lundi 8 mai
Ascension jeudi 18 mai
Fête Nationale vendredi 14 juillet
Assomption mardi 15 août
Toussaint mercredi 1 novembre
Armistice 1918 samedi 11 novembre
Noël lundi 25 décembre

Compléter la chaîne de caractère contenu ci-dessous en saisissant le contenu du fichier csv :

  • on saisira les descripteurs sur la première ligne,
  • on utilisera la virgule comme séparateur.

Vous pouvez saisir les descripteurs dans l'ordre que vous souhaitez, il faut par contre faire en sorte de saisir les valeurs dans le même ordre !

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 20/20

.128013,LFa/JcP_Ai;yI25qe78jVpûv10fâ:gS.C39moérhdëtsRl4k n6=uTêNb050Q0s0S0e0l0V0T0Y0h0V0e0T0T0#010S0l0x010406050T0$0L0L0e0O0n040G0M0V0$0~0M0Z0Y020e0L0x0m0Y0U0s180O0r0$0s0T050f1517191b130x041z1G051J0f1J1L1G130Q0l0z0?0^0`0|0P0l0F0P0V1Z0P0S11050.0*0V0s1U0_0{011Y1!1$1!0S1,1.1*0S0*0M0Q1b1+0O1H0S0P0?1e0T0x0e0Z0|0p011:1W010C0:0s0Z1m0s1*2b2d2i1=2l1.2o0L2q040a0Y0i0O0M0x0M0T0l1h1j0,290O0O0s0h2L1z2s0Z1H0f272X0S2524260Q2u0|1$0Z2n2I1*1R1T0@1;2+0l2-0Z211S1*0x2Q1H2V2X32142c1j2?2j2{0O180V110Y0A2U3612352t381=3a3c3e0p3h2d3j2V2*013o0e3d040Y0J3s2W133v3m0|3y3A0Y0W3E3u363w3K3e0q3O3G3Q3I3x0M3b3z3e0!3V3k371V3n3!3p3B0t3)3H3,3J3.3$3B0u3=3X3@3Z3#3L0K3}3l3 3S040A0B443+2@403/0A3g1A3i3W454d470A3r4i3t4k4c393_3A0A3D4q2W1I301z2;2!0Q2(3w0h212A0+1S1H2 0s313i3O054J0,4R4l39114J0Z0S2n0$3O0Y3*3w0M110#4*4,3Y0T2g04014`4b3w4@110L0M0~0C0b0v0M0$0O0b0Z160s2F0b500l1y4z3P4Y1=4~040g560O0Y2N0V002d0b1R180Z0h0P0s0b0A542d0z0l5c4|4?4^0c0$0Z1R5r1/0i0D1v1x0b1f5P0l5D0B0b0e0z0O0:5K3 5m0d0(4%5r0$0Y2#5(0/0V5X5O1R5D5e0/5,4d5m0w0l2S0M0l2Q3f0K0W0q5|5Z0b0u600l622j5m0k0T0h2n2J1i540s0$5~0A6i186k5i4s4}4^5/5;0)0e2L3z5C0z2n0Q2Q6x0W540$0:1.0S6l5l4^6o0T0M1n2L600O6x6e0e0M0y6X6C4=5-4^0%560`0/4$5e5c0h6Q5!5E2{6N0L0*2Q6Y0|6n3b5g0~6q6b6y0b0T2p6x730M75770s79015m0)0M0R5{5Y5~0p6e0Q0N6q76786=3?634^4`013)0f4V4Q4B7Q0f4E1z0S4G7V2$2Y20222!0e1-7S4E1F4X4t1=2Q0L0j0C0e0X0s0j0P0J111r1t5V0=0E4T1M3j1G0I6%2z0Y2_1R1v0N5r2d0=5t0N2{5z0N0b0Y5t3!6P1/0,0=8t700 4%570=0Z5u0Y2c8u000l1n3!0.5z0s0H0Y0o0V0Y7?1g0Y2J1n1.2z4$0Y5:6a4J0P0N2Q8Z82841Q1S3w1@1#1%1)4O4C345i4U4K7-3R4!1i4%5a4;7I2j4.044:5i4+956Z117L7r5m5a2z5d5f0T5e510l5355579g4^5E0v5G5I585o575R8o5u0Z5w8H2d5A7q7H3~7J11495%5)0:0b5N5Z9C5T806f1R9t9O6j0b6G8s5?5^0z5`9Z6B326D5L116z0/0b6567691/0A6c6e7y9:4j6?9N489^5!6o6q0Z6s9F0v6v9!9L5k7a9u6S0v6U0V6W9(5:1/6I6K1.0b6N5P719#486-6/0S0b6#6%0x6)1tah9;a56m9u597n1s7p0b6_0$6{2_aF9j700saMa49cak9O7m7o2QaG7c0T7e9~0K7h7j2za(4raO9d047A5w7DaTa/7u7w9/aB9f6=7O8}7R2X7+4D0-5`0T04.
« Créer » un fichier json

On souhaite « créer » un fichier json recensant les jours fériés en France durant l'année 2023. Ces jours sont présentés dans le tableau ci-dessous :

motif jour numero mois
Jour de l'an dimanche 1 janvier
Lundi de Pâques lundi 10 avril
Fête du travail lundi 1 mai
Victoire 1945 lundi 8 mai
Ascension jeudi 18 mai
Fête Nationale vendredi 14 juillet
Assomption mardi 15 août
Toussaint mercredi 1 novembre
Armistice 1918 samedi 11 novembre
Noël lundi 25 décembre

Compléter le dictionnaire contenu ci-dessous en saisissant le contenu du fichier json.

Ce dictionnaire contient une unique clé jours_fériés pour laquelle la valeur associée est une liste.

Chacun des éléments de cette liste est un dictionnaire contenant les couples descripteur: valeur.

L'ordre est important !

Les données étant saisies dans une liste, leur ordre importe.

Vous devez donc saisir les lignes dans l'ordre dans lequel elles apparaissent dans le tableau ci-dessus.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 20/20

.128013,fL{â]:gSaF3/9moJcbPérhd_}ëAitsy25q4e78 j[Vn6=puûTêNv10l050y0L0E0k0D0(0F0O0s0(0k0F0F0U010E0D0V010406050F0W0p0p0k0w0G040j0q0(0W0|0q0S050n13151719110V041i1p051s0n1s1u1p110y0D0#0;0?0^0`0x0D0i0x0(1I0x0E0 050,0t0(0L1D0@0_011H1J1L1J0E1R1T1P0E0t0q0y191Q0w1q0E0x0;1c0F0V0k0S0`0H011V1F010c0.0L0S0k0p0L1P1`1|211X241T27290 0a0O0u0w0q0V0q0F0D1f0S0O0*1^0w0w0L0s2u1i2c0S1q0n1?2H0E1;1:1=0y2e0`1L0S262r1P1A1C0=1W2R0D2T0S1-1B1P0V2A1q2F2H2/121{2v2Z222(0w160(0 0O0$2E2?102=2d2^1X2`2|2~0H311|332F2Q01380k2}040O0m3c2G113f360`3i3k0O0K3o3e2?3g3u2~0I3y3q3A3s3h0q2{3j2~0T3F342@1E373K393l0M3P3r3S3t3U3M3l0N3Y3H3!3J3L3v0o3*353,3C040$0%3;3R2!3-3V0$301j323G3=3}3@0$3b423d443|2_3$3k0$3n4a3p3Q3B4f0 0$3x4j2H2,0L2H2X2K0y2O3g0s1-2a1q4w1t2-3Q2:32054B0*2.3+460 4B0S0E260W3y0O4l3I0q0 0U4X4Z3,0~040e3F0O4/4Y3Z3}0F1 04010P0q0W0w0F0z0c0v0w0D0v0F013y4)3}4+0h4(4=224+0Q4.4:5j595f0 4-4r5l1X4@0 010p0q0|0c575p5e1X5b5d4P225s4_0r4|0w2w1U0(001|5z2;5B0`4+0b5E455G4^4`5K5R4K5T015D4r4;5F5r5!1A160S0s0x2a585)5V5X4d5/5t0S140L2o5%3d5q5U0 5c5,67015H010$652G6c5|6b5)6e5v0D565`5.68046a2/5-5Y5 4_0P1|0#0D636h4O6y6t0A5W4r065j5k5{5n6r6I6d5!5v5x6G6j695}3g6e0d0W0S1A5M2m0f0J0W0L6q5A6s5*0 6L6w6c6e4{4}6Y6Q6u6#3I6e1d6*0D706@6k6{6m5!6129646S5~6t6v326x7j6U5t3_796T7b7m6|6V0q6p7s7o5+7c6@6e0k0#532}7i3g4+6K5i6O7n7L6R6?6T6n5w0D5y7K3I7C7v7d5t0l0Z4U2w0W0O2L7G0-7J7T7B6_733,6}5$7Z4*6!6l7E5!761A7A7R046`7$8160627h7?867l3d7Q745!6g7}5a7^807U7x7z8m5m728p7o6n0-857!0 7N6M7P4/6Z4,8t6z5u7W7Y8e8B8v7D8q5t0R0D2C7y2A2 0o0K0I8A7~877_4?5!6~0w8%8n8Q898S4_83788J6t888h7w8b7g4#8`6^8;8}7%4_0N8/8u8|2G8i7`8r6=5S7a7 8R8x6V8z927M9b108F9d8:5o9h8?8L6X9o9j8=9l5t0C0F0s262s1g995C8o9k6$8,7|8O8(8g9c8~6A0L0W849A8)8w9P8 63919S8:9U3l9W6f989#9q9t5Z5t6o9g5(9i949V965u9n9,8u8D2/6N8F8H9v9}9x6W7X9L7k8*9_4_7)7+0!0k2u3j5_a49M9$9O8j5t8-ag939.9^8K0#260y2A9!as8{ai8K7f9*az7#958a4_4paP9N9C9(4_9{aV9 9/a10P0W0.1T1O9#a6439saa927V9zaJaAaL0`6e9F0F0q0p0V2ua#9@9:ay9#aB9:160waI9w7@auaXaw4_aN8dbe8fa{7paT8$9?bo7V8sa_aQa0aS010k0q0Xa-bw8C9qa87Pa=a_a@afb8bt5!0Y4|0^0-4Tb4bPax9Rbm8Pb9a17g0saH8_bFbgaR9xbk9+b!9TbXaTbW9%bi8Lbvb=9-b@3JaE0p0t2Aa#a/4ba;71ab66b%8Ma#b$bz0C2{6p0|9H8Z0$9=b,b5a(bZacbfcg9x0F280Lbdcu86crbzb:cfc040b_av9e9`7y9|cc9~cw9Dbj0qc2c4arb~a5bHc99~cb6icda^cZatcSaY010!0q0B7=c,aKb`cM6ActcQ7t9Bb.cT018^cKbhc{3h8cb;cCb#c00Hbrcqc0a!bOc`8+5t0y0v9Hc3c5a.c#4:8H0g3{860A3P0n4M4u1r4H0n4F2I4y1i2L2K1,1.2K0k1SdDdG1B33dG0+7;0F04.