Les données stockées dans un fichier texte sont généralement structurées et peuvent être lues et encapsulées dans une liste en utilisant le module csv comme on l’a vu avec l’exercice Lecture d’un fichier texte structuré.
Cette façon de faire est plus intéressante qu’une méthode naïve car elle évite une étape de traitement. Elle présente cependant l’inconvénient de dissocier la nature des données (stockée généralement dans la première ligne du fichier) et les données elles mêmes.
On va chercher ici à structurer les données dans des dictionnaires.
Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex10-meteo.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As...
pour conserver l’encodage.
Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :
Les données sont stockées dans le fichier ex08-zip-data-meteo-france-synop.2015110112.csv
L’objectif est d’écrire une fonction read_data_to_dicts()
:
- qui prend en argument un fichier ``csv`` de données météo structurées ;
- et retourne une liste de dictionnaires (un par ligne de données):
- dont les clés sont les champs de la première ligne du fichier ;
- et les valeurs les données correspondantes.
Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main()
et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).
Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.
Le plus souvent seule une partie des données est utilisée pour l’analyse. La fonction read_data_to_dicts()
retourne une liste de dictionnaires comprenant l’ensemble des données.
Ecrire une fonction filter_data()
:
- qui prend en argument un dictionnaire de données météo du type de ceux retournés par ``read_data_to_dicts()`` ;
- et retourne un dictionnaire simplifié avec uniquement les champs suivants :
- ``numer_sta`` ;
- ``date`` ;
- ``t``.
Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main()
et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).
Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.
Le DictReader est une classe adaptée pour stocker les données dans des dictionnaires :
Ainsi un fichier comportant :
m
champs de données ;n-1
lignes de données (m
données par ligne)produira une séquence de n-1
dictionnaires comportant chacun m
paires clé-valeur.