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:
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 :
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.
L’objectif est d’écrire une fonction read_data()
:
n
listes d’entiers si le fichier comporte n
lignes.Utiliser la construction with
et la fonction open()
pour ouvrir le fichier.
file
est nécessaire. Il peut être fourni sous la forme d’une chaîne de caractères ;mode
est optionnel mais c’est une bonne pratique que de le fournir explicitement. On veut ici ouvrir le fichier en lecture. Quelle est la valeur à passer ?encoding
est optionnel. Il est cependant vivement recommandé de le fournir. Pour l’essentiel on travaillera avec l’encodage universel utf8
mais d’autres encodages sont parfois utilisés pour les fichiers français (latin-1
ou iso-8859-1
) ou sur le système d’exploitation Windows (cp850
).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()
.
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).
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.
Afficher la totalité des listes d’entiers contenues dans le fichier listes.csv
.
Ecrire une fonction get_elt_k()
qui :
read_data()
;Vérifier la validité de la fonction en affichant la 37ième liste.
Ecrire les fonctions suivantes :
get_first()
qui prend en argument une liste et retourne le premier élément de cette liste ;get_last()
qui prend en argument une liste et retourne le dernier élément de cette liste ;get_max()
qui prend en argument une liste et retourne le maximum de cette liste ;get_min()
qui prend en argument une liste et retourne le minimum de cette liste ;get_sum()
qui prend en argument une liste et retourne la somme de cette liste.Vérifier la validité des fonctions précédentes en recherchant :