ПочатиПочніть безкоштовно

Створення генератора для завантаження даних частинами (2)

У попередній вправі ви опрацьовували файл рядок за рядком для заданої кількості рядків. А що, якщо ви хочете зробити це для всього файлу?

У такому разі корисно застосувати генератори. Генератори дають змогу виконувати ліниві обчислення даних. Концепція лінивих обчислень особливо корисна, коли ви працюєте з дуже великими наборами даних, адже вона дозволяє ефективно отримувати значення, yield-ячи лише частини даних за раз, а не завантажуючи все одразу.

У цій вправі ви визначите функцію-генератор read_large_file(), яка створює об'єкт-генератор і повертає один рядок із файлу щоразу, коли до нього застосовують next(). CSV-файл 'world_dev_ind.csv' уже є у вашому поточному каталозі.

Зверніть увагу: коли ви відкриваєте з'єднання з файлом, отриманий файловий об'єкт уже є генератором! Тож у реальних задачах вам не доведеться явно створювати об'єкти-генератори в подібних випадках. Однак, з навчальною метою ми пропонуємо вам потренуватися робити це вручну у функції read_large_file(). Успіхів!

Ця вправа є частиною курсу

Набір інструментів Python

Переглянути курс

Інструкції до вправи

  • У функції read_large_file() зчитайте один рядок із file_object методом readline(). Присвойте результат змінній data.
  • У функції read_large_file() поверніть зчитаний із файлу рядок за допомогою yield data.
  • У контекстному менеджері створіть об'єкт-генератор 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(____)
Редагувати та запускати код