Генераторы и yield в Python для больших файлов

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

Pythonгенераторыyield

👁 Если в вашем проекте часто встречаются задачи обработки больших файлов, например, логов или CSV-файлов, то традиционные методы чтения и загрузки всего файла в память могут быть очень неэффективными и ресурсоемкими. Вместо этого можно использовать генераторы, чтобы обрабатывать данные построчно, не загружая их целиком в память.

📝 Пример кода для обработки большого CSV файла:

import csv

# Генератор для построчного чтения большого CSV файла
def read_large_csv(file_name):
    with open(file_name, mode='r') as file:
        csv_reader = csv.reader(file)
        for row in csv_reader:
            yield row

# Обрабатываем файл
for row in read_large_csv('large_data.csv'):
    # Пример обработки данных
    if row[2] == 'Some condition':
        print(row[0], row[1])

📌 Как это работает:

  • В функции read_large_csv используется yield, который позволяет возвращать одну строку за раз из большого файла
  • Вместо того чтобы читать файл целиком в память, скрипт обрабатывает файл по строкам, экономя ресурсы
  • Когда нужная строка обрабатывается, она передается дальше в код для выполнения нужной логики (например, фильтрации, записи в базу данных, вычислений и т.д.)

❗️ Это решение особенно полезно при работе с большими файлами, где каждый мегабайт памяти имеет значение. Использование генераторов в таких задачах позволяет избежать ошибок переполнения памяти и ускоряет процесс обработки.

tags: #python #файлы #разработка

❤️ @recura_tech

Скриншот кода Python с примером генератора read_large_csv и логотипом RECURA — обработка большого CSV построчно
Кодовый пример генератора read_large_csv из поста RECURA

Читайте так же