1. Apprendre
  2. /
  3. Cours
  4. /
  5. Boîte à outils Python

Connected

Exercice

Écrire un générateur pour charger des données par blocs (2)

Dans l'exercice précédent, vous avez traité un fichier ligne par ligne pour un nombre donné de lignes. Et si vous vouliez plutôt le faire pour tout le fichier ?

Dans ce cas, il serait utile d'utiliser des générateurs. Les générateurs permettent d'évaluer paresseusement les données. Ce concept d'« évaluation paresseuse » est pratique lorsque vous devez manipuler des ensembles de données très volumineux, car il permet de produire les valeurs de façon efficace en ne « cédant » qu'un bloc de données à la fois plutôt que tout d'un coup.

Dans cet exercice, vous allez définir une fonction génératrice read_large_file() qui produit un objet générateur et qui cède (yield) une seule ligne d'un fichier chaque fois que next() est appelé. Le fichier CSV 'world_dev_ind.csv' se trouve dans votre répertoire courant pour que vous puissiez l'utiliser.

Notez que lorsque vous ouvrez une connexion à un fichier, l'objet fichier résultant est déjà un générateur ! Donc, en pratique, vous n'aurez pas à créer explicitement des objets générateurs dans des cas comme celui-ci. Toutefois, pour des raisons pédagogiques, nous vous faisons pratiquer la démarche ici avec la fonction read_large_file(). À vous de jouer !

Instructions

100 XP
  • Dans la fonction read_large_file(), lisez une ligne de file_object à l'aide de la méthode readline(). Affectez le résultat à data.
  • Dans la fonction read_large_file(), utilisez yield pour céder la ligne lue du fichier, data.
  • Dans le gestionnaire de contexte, créez un objet générateur gen_file en appelant votre fonction génératrice read_large_file() et en lui passant file.
  • Affichez les trois premières lignes produites par l'objet générateur gen_file à l'aide de next().