ComenzarEmpieza gratis

Escritura de un generador para cargar datos en fragmentos (2)

En el ejercicio anterior, procesaste un número determinado de líneas en un archivo línea por línea. Pero ¿y si quieres hacerlo en todo el archivo?

En este caso, sería útil utilizar generadores. Los generadores permiten a los usuarios evaluar perezosamente los datos. Este concepto de evaluación perezosa es útil cuando tienes que tratar con conjuntos de datos muy grandes, porque te permite generar valores de forma eficiente produciendo solo fragmentos de datos cada vez, y no todo junto.

En este ejercicio, definirás la función de generador read_large_file(), que crea un objeto generador que produce una única línea a partir de un archivo cada vez que se llama a next() en él. El archivo .csv 'world_dev_ind.csv' está en tu directorio actual para que lo utilices.

Ten en cuenta que, cuando abres una conexión a un archivo, el objeto archivo resultante ya es un generador. Así que, en el mundo real, no tendrás que crear explícitamente objetos generadores en casos como este. Sin embargo, por razones pedagógicas, aquí te hacemos practicar cómo hacerlo con la función read_large_file(). ¡A por ello!

Este ejercicio forma parte del curso

Caja de herramientas Python

Ver curso

Instrucciones de ejercicio

  • En la función read_large_file(), lee una línea de file_object utilizando el método readline(). Asigna el resultado a .
  • En la función read_large_file(), aplica yield a la línea leída del archivo data.
  • En el gestor de contexto, crea un objeto generador gen_file llamando a tu función de generadora read_large_file() y pasándole file.
  • Imprime las tres primeras líneas producidas por el objeto generador gen_file utilizando next().

Ejercicio interactivo práctico

Pruebe este ejercicio completando este código de muestra.

# 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 y ejecutar código