Začněte nyníZačněte zdarma

Psaní generátoru pro načítání dat po částech (2)

V předchozím cvičení jsi zpracoval/a soubor řádek po řádku pro zadaný počet řádků. Co kdybys ale chtěl/a zpracovat celý soubor?

V takovém případě se hodí použít generátory. Generátory umožňují líné vyhodnocování dat. Koncept líného vyhodnocování je užitečný při práci s velmi velkými datasety — umožňuje generovat hodnoty efektivně tím, že v každém okamžiku vrátí jen část dat, nikoli vše najednou.

V tomto cvičení definuješ generátorovou funkci read_large_file(), která vytvoří generátorový objekt vracející při každém volání next() jeden řádek ze souboru. CSV soubor 'world_dev_ind.csv' máš k dispozici v aktuálním adresáři.

Měj na paměti, že když otevřeš spojení se souborem, vzniklý souborový objekt je již sám o sobě generátor! V praxi tedy nemusíš generátorové objekty v takových případech vytvářet explicitně. Pro procvičení si to ale v tomto cvičení vyzkoušíš právě s funkcí read_large_file(). Jdeme na to!

Toto cvičení je součástí kurzu

Python Toolbox

Zobrazit kurz

Pokyny k cvičení

  • Ve funkci read_large_file() načti řádek z file_object pomocí metody readline(). Výsledek přiřaď do proměnné data.
  • Ve funkci read_large_file() vrať načtený řádek data pomocí příkazu yield.
  • V kontextovém manažeru vytvoř generátorový objekt gen_file voláním své generátorové funkce read_large_file() a předáním file jako argumentu.
  • Pomocí next() vytiskni první tři řádky vrácené generátorovým objektem gen_file.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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(____)
Upravit a spustit kód