IniziaInizia gratis

Scrivere un generatore per caricare i dati in blocchi (2)

Nell'esercizio precedente hai lavorato su un file riga per riga per un certo numero di righe. E se invece volessi farlo per tutto il file?

In questo caso, sarebbe utile usare dei generatori. I generatori permettono agli utenti di valutare in modo pigro i dati. Questo concetto di valutazione pigra è utile quando si ha a che fare con set di dati molto grandi, perché consente di generare valori in modo efficiente, producendo solo porzioni di dati alla volta invece che l'intero set in una sola volta.

In questo esercizio, definirai una funzione generatrice read_large_file() che crea un oggetto generatore che restituisce una singola riga da un file ogni volta che viene chiamato next(). Il file csv 'world_dev_ind.csv' è nella tua cartella attuale, pronto per essere usato.

Tieni presente che quando apri una connessione a un file, l'oggetto file che ne risulta è già un generatore! Quindi, in pratica, non dovrai creare esplicitamente oggetti generatori in casi come questo. Comunque, per motivi didattici, ti facciamo fare pratica su come farlo qui con la funzione read_large_file(). Dai, buttati!

Questo esercizio fa parte del corso

Strumenti per Python

Visualizza il corso

Istruzioni dell'esercizio

  • Nella funzione read_large_file(), leggi una riga da file_object usando il metodo readline(). Assegna il risultato a data.
  • Nella funzione read_large_file(), yield la riga viene letta dal file data.
  • Nel context manager, crea un oggetto generatore gen_file chiamando la tua funzione generatrice read_large_file() e passandoci file.
  • Stampa le prime tre righe generate dall'oggetto generatore gen_file usando next().

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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(____)
Modifica ed esegui il codice