LoslegenKostenlos loslegen

Einen Generator schreiben, um Daten in Blöcken zu laden (2)

In der vorherigen Aufgabe hast du eine Datei Zeile für Zeile für eine bestimmte Anzahl von Zeilen bearbeitet. Was aber, wenn du dies für die gesamte Datei tun willst?

In diesem Fall wäre es sinnvoll, Generatoren zu verwenden. Mit Generatoren können Benutzer Daten per Lazy Evaluation auswerten. Dieses Konzept der Lazy Evaluation (bequeme oder faule Auswertung) ist nützlich, wenn du mit sehr großen Datensätzen hantieren musst, denn es ermöglicht dir, Werte auf effiziente Weise zu generieren, indem du jeweils nur Teile der Daten auswertest, anstatt alles auf einmal.

In dieser Aufgabe wirst du eine Generatorfunktion read_large_file() definieren, die ein Generatorobjekt erzeugt, das bei jedem Aufruf von next() eine einzelne Zeile aus einer Datei liefert. Die csv-Datei 'world_dev_ind.csv' steht dir in deinem aktuellen Verzeichnis zur Verfügung.

Wenn du eine Verbindung zu einer Datei öffnest, ist das resultierende Dateiobjekt bereits ein Generator! In freier Wildbahn musst du in solchen Fällen also nicht explizit Generatorobjekte erstellen. Aus pädagogischen Gründen lassen wir dich hier jedoch mit der Funktion read_large_file() üben, wie man das macht. Los geht‘s!

Diese Übung ist Teil des Kurses

Python Toolbox

Kurs anzeigen

Anleitung zur Übung

  • Lies in der Funktion read_large_file() eine Zeile aus file_object, indem du die Methode readline() verwendest. Weise das Ergebnis data zu.
  • In der Funktion read_large_file(), yield wird die Zeile aus der Datei data gelesen.
  • Erstelle im Kontextmanager ein Generatorobjekt gen_file, indem du deine Generatorfunktion read_large_file() aufrufst und ihr file übergibst.
  • Gib die ersten drei Zeilen aus, die das Generatorobjekt gen_file mit next() erzeugt.

Interaktive Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# 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 bearbeiten und ausführen