Lecture de données

Contexte

Les données sont stockées de façon indépendante du programme qui les utilise. Il est donc nécessaire d’accéder à celles ci (depuis le programme) à travers trois étapes:

  1. ouvrir le fichier, c’est à dire établir le lien, avec la ressource qui les contient. Ce peut être un fichier local à la machine sur laquelle s’exécute le programme, ou un fichier distant accessible sur le réseau, une page web, etc. ;
  2. récupérer les données du fichier ;
  3. les retourner au programme appelant.

Environnement de travail

Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex08-lecture.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 :

  1. Imports et définition des variables globales ;
  2. Définition des fonctions secondaires ;
  3. Définition de la fonction principale ;
  4. Appel protégé de la fonction principale.

Les données utilisées pour cet exercice sont stockées dans le fichier ex08-lecture-data-listes.csv. Ce fichier contient 100 listes de 10 nombres compris dans l’intervalle [10, 100[. Le fichier est encodé en utf8. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Objectifs

L’objectif est d’écrire une fonction read_data() :

Ouvrir le fichier

Utiliser la construction with et la fonction open() pour ouvrir le fichier.

Récupérer les données

La fonction open() renvoie un objet io.TextIOWrapper, qui fournit quelques méthodes de lecture simples à manipuler.

Parmi ces méthodes, readlines() est intéressante, car elle permet de récupèrer les données du fichier en une seule opération.

Explorons à présent l’objet retourné par readlines().

Retourner les données

Les données lues dans un fichier texte par readlines() sont retournées sous la forme d’une liste de chaines de caractères. Relire attentivement la consigne et jeter un oeil sur les doctests pour avoir une idée précise de l’attendu.

Utiliser une list comprehension pour fabriquer une liste d’entiers pour chaque élément de la liste retournée.

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).

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex08_lecture.py -v

La totalité des doctests doivent réussir.

Applications

Afficher la totalité des listes d’entiers contenues dans le fichier listes.csv.

Ecrire une fonction get_elt_k() qui :

Vérifier la validité de la fonction en affichant la 37ième liste.

Ecrire les fonctions suivantes :

Vérifier la validité des fonctions précédentes en recherchant :