ComeçarComece gratuitamente

Escrevendo um gerador para carregar dados em partes (2)

No exercício anterior, você processou um arquivo linha por linha para um determinado número de linhas. E se você quisesse fazer isso com o arquivo inteiro?

Nesse caso, seria útil usar geradores. Os geradores permitem que os usuários avaliem preguiçosamente dados. Esse conceito de avaliação preguiçosa é útil quando você precisa lidar com conjuntos de dados muito grandes, pois permite gerar valores de maneira eficiente, fornecendo apenas partes dos dados de cada vez, em vez de tudo de uma vez só.

Neste exercício, você definirá uma função geradora read_large_file() que produz um objeto gerador que produz uma única linha de um arquivo sempre que next() é chamado sobre ele. Use o arquivo csv 'world_dev_ind.csv' que está no diretório atual.

Observe que, quando você abre uma conexão com um arquivo, o objeto de arquivo resultante já é um gerador! Portanto, no mundo real, você não precisará criar explicitamente objetos geradores em casos como esse. No entanto, por motivos pedagógicos, pedimos que você pratique como fazer isso aqui com a função read_large_file(). Pode começar!

Este exercício faz parte do curso

Caixa de ferramentas Python

Ver Curso

Instruções de exercício

  • Na função read_large_file(), leia uma linha de file_object usando o método readline(). Atribua o resultado a data.
  • Na função read_large_file(), yield a linha lida do arquivo data.
  • No gerenciador de contexto, crie um objeto gerador gen_file chamando a função geradora read_large_file() e passando file para ele.
  • Imprima as três primeiras linhas produzidas pelo objeto gerador gen_file usando next().

Exercício interativo prático

Experimente este exercício preenchendo este código de exemplo.

# 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(____)
Editar e executar código