Створення генератора для завантаження даних частинами (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(____)