НачатьНачать бесплатно

Создание генератора для загрузки данных по частям (2)

В предыдущем упражнении вы обрабатывали файл построчно для заданного количества строк. Но что, если нужно сделать это для всего файла?

В таком случае удобно использовать генераторы. Генераторы позволяют лениво вычислять данные. Концепция ленивых вычислений особенно полезна при работе с очень большими наборами данных: она позволяет эффективно генерировать значения, возвращая лишь небольшие фрагменты данных за раз, а не всё сразу.

В этом упражнении вы определите функцию-генератор read_large_file(), которая создаёт объект-генератор, возвращающий по одной строке из файла при каждом вызове next(). CSV-файл 'world_dev_ind.csv' находится в вашем текущем рабочем каталоге.

Обратите внимание: когда вы открываете соединение с файлом, полученный файловый объект уже является генератором! Поэтому на практике явно создавать объекты-генераторы в подобных случаях не потребуется. Однако в учебных целях мы предлагаем вам потренироваться в этом с помощью функции read_large_file(). Приступайте!

Это упражнение является частью курса

Инструментарий Python

Посмотреть курс

Инструкции к упражнению

  • В функции read_large_file() считайте строку из file_object с помощью метода readline(). Сохраните результат в переменную data.
  • В функции read_large_file() верните считанную строку data с помощью yield.
  • В контекстном менеджере создайте объект-генератор gen_file, вызвав вашу функцию-генератор read_large_file() и передав в неё file.
  • Выведите первые три строки, которые возвращает объект-генератор gen_file, используя next().

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# 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(____)
Редактировать и запускать код