Les données sont lues à l’aide de la fonction io.open et stockées dans des listes. Toutes les données sont relues à chaque nouveau graphique.
todo: On pourrait optimiser le programme en ne relisant que les valeurs ajoutées, en se souvenant le numéro de la dernière ligne lue en comptant le nombre de caractères de saut de ligne.
Pour lire les données, on ferait donc
with open('data/data_%s'%str(i)) as di:
dataList = ([line for line in di])
On se rendra compte que le caractère de saut de ligne est encore là. On utilise donc la fonction rstrip
Retourne: | copie de la chaîne str avec les espaces et caractères spéciaux supprimés |
---|---|
Type retourné: | string |
ce qui nous donne
with open('data/data_%s'%str(i)) as di:
dataList.append([line.rstrip() for line in di])
pygal attend les antécédents en chaînes de caractères et les images en entiers ou flottants, or les données sont lues comme des chaînes de caractères, il faut donc convertir les images en flottants, à l’aide de map
map(func, *iterables) –> map object
Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.
On ferme ensuite les fichiers avec close :
Ferme le fichier f
On utilise un graphique de type Line
La documentation de pygal est assez fournie, je ne redétaillerais pas la configuration.
Quand le programme commence à faire le graphique, il supprime l’ancien, fait le nouveau puis l’écrit sur le disque, ce qui fait qu’il y a un laps de temps où il n’y a plus aucun graphique. Il faut donc faire un graphique temporaire et un graphique à publier. pygal crée le graphique ‘linechart_temps.svg’, puis on le renomme en ‘linechart.svg’ à l’aide de
rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Rename a file or directory.
On notera qu’il n’y a pas besoin de supprimer linechart.svg avant de renommer linechart_temp.svg sur les systèmes Posix. Si le programme doit tourner sous NT, il faudra supprimer linechart.svg avant de renommer linechart_temp.svg.