Aller au contenu

Import d'un fichier csv dans une liste de listes

On considère le fichier temperatures_2020.csv. Ce fichier regroupe les températures minimales, maximales et moyennes dans différentes régions françaises pour certains jours de l'année 2020. Il est dans le dossier de travail et est encodé en utf-8.

Les premières lignes du fichier sont données ci-dessous :

📑 Données CSV
mois,jour,région,tmin,tmax,tmoy
août,13,Pays de la Loire,19.25,25.35,22.3
août,13,Occitanie,17.51,26.55,22.03
Activité 1 - Repérer les bonnes informations

Observez l'extrait proposé et répondez aux questions suivantes :

  1. Quel est le séparateur utilisé ?
  2. Combien y-a-t-il de descripteurs ?
  3. Quels sont les types des descripteurs ? (entier, nombre décimal, chaîne de caractères...)
Solution
  1. Le séparateur est la virgule
  2. Il y a six descripteurs
  3. mois et région sont des chaînes de caractères, jour est un entier, les trois autres sont des flottants.

Un fichier csv est un fichier contenant des données textuelles : son importation avec Python peut se faire facilement avec open.

On propose dans un premier temps d'importer les données dans une liste de listes. Voici un code fonctionnel :

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

temperatures = []
with open(file="temperatures_2020.csv", mode="r", encoding="utf-8") as fichier:
    fichier.readline()  # (1)
    for ligne in fichier:  # (2)
        ligne_propre = ligne.strip()  # (3)
        valeurs = ligne_propre.split(",")  # (4)
        temperatures.append(valeurs)
  1. ⚠ Les descripteurs ne sont pas utilisés : on lit la première ligne sans l'ajouter au résultat ⚠
  2. đź‘“ Parcours et lecture de toutes les lignes restantes đź‘“
  3. 🧹 on ôte le \n en fin de ligne 🧹
  4. ✂ on découpe la ligne à chaque caractère "," en une liste de valeurs ✂

On obtient le résultat suivant :

temperatures = [
    ["août", "13", "Pays de la Loire", "19.25", "25.35", "22.3"],
    ["août", "13", "Occitanie", "17.51", "26.55", "22.03"],
    ["août", "14", "Pays de la Loire", "17.7", "25.7", "21.7"],
    ...
]

Les données ont bien été importées mais elles sont mal typées : les températures sont par exemple stockées sous forme des chaînes de caractères. Sous cette forme la somme "19.25" + "26.55" renvoie "19.2526.55" !

Il reste donc à typer les données. Par défaut celles-ci sont toutes au format str. Seuls les nombres entiers et les décimaux sont à typer.

On rappelle les indices ci-dessous :

Descripteur mois jour région tmin tmax tmoy
Indice 0 1 2 3 4 5
Type Python str int str float float float

Il est possible de typer toutes les valeurs Ă  l'indice 1 en faisant :

for entree in temperatures:
    entree[1] = int(entree[1])  # int convertit une chaîne de caractère en un entier
Activité 2 - Import et typage complets

Compléter le script ci-dessous permettant d'importer et de typer convenablement les données du fichier temperatures_2020.csv.

On rappelle que float permet de convertir une chaîne de caractère en un flottant.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 10/10

.128013tèlO12/vygj.]Tsw9huqi6Pé[-dm0rA=7fbI) e:,8Rnp5(aSo3k_4;c050B0N0b0W0v0d0p0M0(0d0W0p0p0G010b0v0T010406050p0t0C0C0W0E0j040X0Y0d0t0|0Y0S0M020W0C0T0%0M0R0N160E0u0t0N0p050h13151719110T04051E1x1H0h1E110B0v0i0;0?0^0`0s0v0k0s0d1V0s0b0 050,0J0d0N1Q0@0_011U1W1Y1W0b1(1*1$0b0E1F0b0s0;1c0p0T0W0S0`0g011,1S010I0.0N0S1k0N1$2224291.2c1*2f0C2h040a0M0x0E0Y0T0Y0p0v1f1h0*200E0E0N0(2C1x2j0S1F0h1~2O1{1}1|1%0B2l0`1Y0S2e2z1$1N1P0=1-2Y0v2!0S0Y2(1$0T2H1F2M2O2_12231h2*2a2/0E160d0 0M0f2L2}102|2k2 1.3133350g38243a2M2X013f0W34040M0Z3j2N113m3d0`3p3r0M0$3v3l2}3n3B350U3F3x3H3z3o0Y323q350w3M3b2~1R3e3R3g3s0H3W3y3Z3A3#3T3s0Q3)3O3+3Q3S3C0r3;3c3?3J040f0D3{3Y2+3@3$0f371y393N3|443~0f3i493k4b43303-3r0f3u4h3w3X3I4m0 0f3E4q3G4c4l3^4v3L4y1I2@1x2(2R0B1}2W3P0(2:2r0)1O1F2?0N2^393F054P0*4X4A1.0(0f0 030M0K1l3R0b423I0 0b1q0T0N0E0W0b0t2H1w4y0M4s3P0Y0 0G3F543*440~040z0n4?3P0!0 0q2B0s5a553}0J0 2x2e4Z5c2a5e0V5w3=4d0 2n0N5B4(0`5704594F5x1.0p2704021t0Y0b0%4_1l4|4~501v0#0g0D5)0m0(0p0i5T0t5V0%5H4k1.5e0P5p5O3A0 0C4Q5@3n5K5M2{5}015Q0 5:5=0E6b5W623P5`5|5C300 2e4#2-0k6g3?646r44695S5U5W1e0I0A0Q6e5?5N6k5_0 0L6j5I015k040@6L5^5~042c0(1U4|6u5y0 0O3M0M6(5b6H6T6V6X0E6Z1.5K0m6:6T2H0W0B2Z5G6G6M5z6K4y066)6*6M6O0I3R6R4@041=2!7a560q0 2-7f3}5E0v6W0v6Y6~6S015e6$7274745q5D7c1V2!0#2?2x2H7k446t537z6l7B0k7e7r630 6?7R3P0S0 0p1{0}6@7t0 0V712_737x6(7M3e0 0i3q0N50522_757s7K7`7/6T7d0N7E2w4V7$6=7$7X04221Y4=7V3?5z7$6w6E0P6E7$5e7*4a7-7.67895Y4{4}4 51867T880 0W0T4{0S0B8m7(8B047=1*7^8I048o4i4j3n4*4,0M0o0j230k6}7+7 6N5E797L8s6m0S1{0N8$397{637h047j8,6+3o4^4`5!8x1v8P7v7+7y8-042e8:8=3k8(5e0z7$0C0v4v8P5h8|6M7}8?8(0S5s8`8/8P5A8e7A9a2H9c2N9e0 9g9y2a9i9k9H6I040n8R3w978}899A8;8P9G668}9J044p9Y6 0 9m7~679p3k8@7W9t0I0d0Y4~9w8K9U9C4%7s9f9h9j9#9l9P109R6M9T8/9B9Wa00 4x9%9~9)7I2a9-2N9/5r5E9?9^9L0`8gar8~99a99Vau9 au9!ae4Y675e9O6%6)9r8.9babaBa14Eaf3naGai6;58aU3A9;ap8daR6h8Jaua8aMaz9Fac04aQaE8}aGa4110h4#4W4Ga{0h4J1x0b4Lb02U2P0W1)a}4J1D9}3n2H0C0#0I0W0!820s0Z0 1p1r1t1v0M954Y1K3a1E0e1h4{1e0M0W0t0^0v0M0b8Z4|0M1*0:0B1g0S0ybq0B0c0:0d000v4:0E0,2Cbr1I3a2(3n1:1X1Z1#4U4H2{4Fa`bb7W8 5Z8w5$7_9q9,aW9nag5f9*4a8(6O5m1~aX3o9t5u0S9_a)7m1*8z5L8h5R6E8u91b|5(5*0D5,5.8la,045{c17b600*cj65a;6M8i6y0%6dcJ8Pcz9+9S8.6o0S6qauakb@3?cI5;6z0b6B6DcMcxa4am446O6QcAb^6U7n6.94aI8rcQc=7o7qa$6s8Acg046_6{2-9|9E047)c_c,2a778+cPa70 81ca0Y8_8{dg7s896-7p6/cxbs4i8qdc7:7O7D7F85c:d0ckdE7AdjcVd1c 7A7Z0E7#cxda7w8qaK8L7?8OdHajc0do7b81837Gd7b 047UdM7N8b2Bcfd/5PcmcJ8kc)d@as6Jdba67s8V044-8Y8!9|7,7-dV8M7@0Eb}9daFa-aO9Kd}7%9Ndkd#b~9S9t2-a#cGc29xel89ecdYelaAel9!48eC9)a@dxc68*dtd$c;2-1N0(9|dy5JdmcedZ9M9Xev3n9!9$e#a%cycaaCcNe,aP9ldv9QdxaJ98eAeeaNey7i8G7nd+a=aheY5Jep9.9raZ9@euegf2d98Ke`ef9Deh5f8KeQf0a3e0e^8}e34-0F0l0YbA2E0?0M2/0t0i0N0d1*bK7Ce8eK98cob{8ydKd-8K8D8F8HdRffdXe{c*3Wa_4Q2O4V2Ob94I0+0-0/04.