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
Instruções de exercício
- Na função
read_large_file()
, leia uma linha defile_object
usando o métodoreadline()
. Atribua o resultado adata
. - Na função
read_large_file()
,yield
a linha lida do arquivodata
. - No gerenciador de contexto, crie um objeto gerador
gen_file
chamando a função geradoraread_large_file()
e passandofile
para ele. - Imprima as três primeiras linhas produzidas pelo objeto gerador
gen_file
usandonext()
.
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(____)