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