Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: stream, chunk, buffer, memory efficient, large file

Как прочитать большой файл (например, 20 ГБ)?

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

Короткий ответ

Для чтения больших файлов нельзя загружать весь файл в память, так как это вызовет ошибку нехватки памяти. Вместо этого нужно читать файл по частям (чанкам) с использованием потоков (streams) или буферизованного чтения. Например, в Python можно использовать цикл с чтением блоками, а в Node.js — потоки (fs.createReadStream). Это позволяет обрабатывать файл последовательно, не превышая лимиты памяти.

Длинный ответ

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

Основной принцип

Идея заключается в том, чтобы открыть файл и читать его фрагментами (например, по 64 КБ, 1 МБ или другому удобному размеру), обрабатывая каждый фрагмент и затем освобождая память перед чтением следующего. Это позволяет работать с файлами любого размера, ограничиваясь лишь объёмом дискового пространства, а не оперативной памяти.

Примеры кода

Вот как это можно реализовать на Python с использованием обычного файлового объекта:

chunk_size = 1024 * 1024  # 1 МБ
with open('large_file.txt', 'r') as f:
    while True:
        chunk = f.read(chunk_size)
        if not chunk:
            break
        # Обработка чанка, например, подсчёт строк
        lines = chunk.count('\n')
        print(f'Прочитано строк в чанке: {lines}')

В Node.js для этого удобно использовать потоки (Streams API):

const fs = require('fs');
const readStream = fs.createReadStream('large_file.txt', { highWaterMark: 64 * 1024 }); // 64 КБ чанки

readStream.on('data', (chunk) => {
    // Обработка каждого чанка
    console.log(`Получено ${chunk.length} байт данных`);
});

readStream.on('end', () => {
    console.log('Чтение файла завершено');
});

Где применяется

Такой подход используется в множестве сценариев: обработка логов, загрузка больших CSV или JSON файлов в базы данных, резервное копирование, стриминг видео или аудио, а также в ETL-процессах для анализа данных. Библиотеки и фреймворки часто предоставляют встроенные средства для потоковой обработки (например, модуль stream в Node.js или io в Java).

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • Python

    Python

  • Node.js

    Node.js

Ключевые слова

#stream

#chunk

#buffer

#memory efficient

#large file

Подпишись на Python Developer в телеграм