Aan de slagGa gratis aan de slag

Een generator schrijven om data in chunks te laden (2)

In de vorige oefening heb je een bestand regel voor regel verwerkt voor een vastgesteld aantal regels. Maar wat als je dit voor het hele bestand wilt doen?

In dat geval is het handig om generators te gebruiken. Met generators kun je data lui evalueren. Dit concept van lui evalueren is nuttig bij zeer grote gegevenssets, omdat je zo waarden efficiënt kunt genereren door telkens slechts stukjes data te yielden in plaats van alles in één keer.

In deze oefening definieer je een generatorfunctie read_large_file() die een generatorobject oplevert dat elke keer dat je next() aanroept één regel uit een bestand yieldt. Het csv-bestand 'world_dev_ind.csv' staat in je huidige map.

Let op: als je een bestand opent, is het resulterende bestandsobject al een generator! In de praktijk hoef je in dit soort gevallen dus niet expliciet generatorobjecten te maken. Voor de leerervaring laten we je hier echter oefenen met de functie read_large_file(). Succes!

Deze oefening maakt deel uit van de cursus

Python-gereedschapskist

Cursus bekijken

Oefeninstructies

  • Lees in de functie read_large_file() één regel uit file_object met de methode readline(). Wijs het resultaat toe aan data.
  • yield in de functie read_large_file() de uit het bestand gelezen regel data.
  • Maak in de contextmanager een generatorobject gen_file door je generatorfunctie read_large_file() aan te roepen en file door te geven.
  • Print de eerste drie regels die het generatorobject gen_file oplevert met next().

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# Define read_large_file()
def read_large_file(file_object):
    """A generator function to read a large file lazily."""

    # Loop indefinitely until the end of the file
    while True:

        # Read a line from the file: data
        data = ____

        # Break if this is the end of the file
        if not data:
            break

        # Yield the line of data
        
        
# Open a connection to the file
with open('world_dev_ind.csv') as file:

    # Create a generator object for the file: gen_file
    gen_file = ____

    # Print the first three lines of the file
    print(____)
    print(____)
    print(____)
Code bewerken en uitvoeren