def extract_emails_from_huge_file(file_path: str) -> list[str]:

Функция читает огромный файл целиком и создаёт несколько копий; проверка наличия @ не распознаёт email. Для экономии памяти обрабатывайте строки по одной и отдавайте найденные кандидаты итератором.

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

Что ответить на собеседовании

Функция читает огромный файл целиком и создаёт несколько копий; проверка наличия @ не распознаёт email. Для экономии памяти обрабатывайте строки по одной и отдавайте найденные кандидаты итератором.

Подробный разбор

Ответ с пояснениями

Условие

def extract_emails_from_huge_file(file_path: str) -> list[str]: with open(file_path, 'r', encoding='utf-8') as f: content = f.read()

# Заменяем переносы строк, чтобы текст был "сплошным"
content = content.replace('\r\n', ' ').replace('\n', ' ')

lines = content.split(' ')
emails = [word for word in lines if '@' in word]
return emails

Ответ

Функция читает огромный файл целиком и создаёт несколько копий; проверка наличия @ не распознаёт email. Для экономии памяти обрабатывайте строки по одной и отдавайте найденные кандидаты итератором.

Пример упрощённого извлечения кандидатов:

import re

PATTERN = re.compile(r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}')

def iter_email_candidates(path):
    with open(path, encoding='utf-8') as stream:
        for line in stream:
            for match in PATTERN.finditer(line):
                yield match.group()

Это не полный RFC-валидатор: международные адреса и сложные формы требуют отдельной политики. Память ограничена максимальной строкой; для гигантских строк нужен chunk-parser с переносом хвоста. Если контракт требует list, память под весь результат всё равно потребуется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее