Файлы и обработка данных: разбор для ЕГЭ
Если «Файлы и обработка данных» кажется тёмным лесом — это нормально: тема собрана из нескольких простых идей. Покажем их по порядку, разберём пример и предупредим о ловушках экзамена.
Зачем уметь работать с файлами на ЕГЭ по информатике
Каждый второй выпускник теряет первичные баллы на заданиях 17, 24 и 26 просто потому, что путается в методах чтения больших файлов и забывает очистить строки от переносов. В этой статье мы пошагово разберём чтение и обработку данных в Python, чтобы ты уверенно решал эти задачи за считаные минуты без паники и обидных помарок.
В компьютерном ЕГЭ файлы встречаются регулярно. Тебе выдают текстовый документ, внутри которого могут быть сотни тысяч целых чисел или непрерывная строка из миллионов символов. Вручную открыть такой файл в блокноте и найти ответ невозможно: текстовый редактор либо зависнет, либо не позволит применить сложную логику фильтрации.
Чтобы успешно справиться с заданиями, нужно освоить три базовых навыка: правильное открытие файла без утечек памяти, преобразование строк в нужный тип данных (числа, списки, кортежи) и эффективный проход по элементам в цикле. Ты можешь сразу закрепить каждый приём на интерактивных задачах через бесплатный тренажёр Просто Урок.
Методы чтения и парсинга данных в Python
Для работы с файлами в Python используется встроенная функция открытия. Самый надёжный способ — применять контекстный менеджер. Он автоматически закроет файл после окончания блока кода, даже если внутри программы произойдёт ошибка.
Давай сравним основные способы чтения данных из файла:
| Метод | Что возвращает | Нагрузка на память | Где лучше применять |
|---|---|---|---|
| f.read() | Один сплошной текст (str) | Высокая (весь файл в ОЗУ) | Задание №24 (поиск цепочек символов) |
| f.readlines() | Список строк (list of str) | Средняя (список всех строк) | Небольшие файлы, где нужен доступ по индексу |
| Итерация по f | По одной строке за шаг цикла | Минимальная (потоковая обработка) | Задания №17, №26, №27 с миллионами строк |
Когда мы читаем числа построчно, важно помнить о невидимом символе перевода строки. Если применить функцию преобразования к целому числу, язык Python проигнорирует пробельные символы сам, но при обработке текста их нужно убирать вручную методом отсечения пробелов.
Обработка числовых последовательностей
В задании №17 чаще всего требуется проанализировать пары или тройки последовательных элементов. Сначала мы считываем все числа в список, чтобы иметь возможность обращаться к соседним позициям через индексы.
Создавай список чисел генератором в одну строчку: a = [int(x) for x in open('17.txt')]. Это экономит время на экзамене и сразу преобразует все строки файла в целые числа.
Алгоритм поиска пар строится на одном цикле. Если в списке N элементов, то количество соседних пар равно N − 1. Соответственно, цикл должен идти от 0 до N − 2 включительно, чтобы индекс следующего элемента не вышел за пределы массива.
Потренироваться в написании таких генераторов и отследить скрытые ошибки можно в личном кабинете Просто Урок, где собраны типовые тесты с автопроверкой кода.
Разбор типового задания №17 из ЕГЭ
Рассмотрим классическую формулировку: в файле содержатся целые числа, по модулю не превышающие 100 000. Определи количество пар элементов последовательности, в которых хотя бы одно число оканчивается на 3, а сумма элементов пары кратна минимальному числу файла, оканчивающемуся на 3. В ответе запиши количество найденных пар, затем максимальную из сумм таких пар.
Разобьём решение на последовательные шаги:
Шаг 1: Загрузить данные из файла в список целых чисел.
Шаг 2: Найти минимальный элемент списка, оканчивающийся на 3 (через abs(x) % 10 == 3).
Шаг 3: Завести счётчик пар count = 0 и переменную max_sum = -10**9.
Шаг 4: Пройти циклом по элементам от 0 до len(a) - 2.
Шаг 5: Для пары a[i] и a[i+1] проверить условие: хотя бы одно оканчивается на 3.
Шаг 6: Проверить кратность суммы пары: (a[i] + a[i+1]) % min_val == 0.
Шаг 7: Если оба условия верны: count += 1, max_sum = max(max_sum, a[i] + a[i+1]).
Шаг 8: Вывести count и max_sum.
Обрати внимание на проверку последней цифры для отрицательных чисел. В Python операция остатка от деления отрицательного числа на 10 может дать неожиданный результат: например, выражение -13 % 10 возвращает 7, а не 3. Поэтому остаток нужно всегда брать от абсолютного значения числа с помощью встроенной функции модуля.
Символьные файлы и задание №24: поиск подстрок
Задание №24 проверяет умение работать со строковыми последовательностями. Файл содержит одну длинную строку из букв латинского алфавита. Обычно требуется найти длину самой длинной непрерывной цепочки символов, удовлетворяющей заданному правилу.
Не используй метод replace() многократно для файлов размером в десятки мегабайт. Множественные строковые замены создают копии строк в оперативной памяти и приводят к зависанию программы во время экзамена.
Для эффективного решения используй метод динамического подсчёта. Заведи текущую длину цепочки cur_len = 1 и максимальную длину max_len = 1. Проходи по строке одним циклом от первого символа до конца: если текущий и предыдущий символы подходят под условие задачи, увеличивай cur_len на единицу и обновляй max_len. Если условие нарушилось — сбрасывай cur_len в базовое состояние.
Такой линейный алгоритм работает мгновенно даже на строках длиной в несколько миллионов знаков.
Что запомнить: чек-лист для практики
Закрепим основные правила обработки файлов на ЕГЭ по информатике:
1. Для строковых задач №24 используй s = open('24.txt').read().
2. Для числовых списков №17 применяй a = [int(x) for x in open('17.txt')].
3. При поиске последней цифры всегда используй abs(x) % 10.
4. В цикле по парам граница диапазона строго range(len(a) - 1).
5. Для поиска максимума задавай заведомо малое начальное значение, а не ноль.
Теория работает только вместе с практикой. Сделай следующий шаг прямо сейчас: перейди в личный кабинет Просто Урок и реши 5 тренировочных задач по файлам бесплатно, чтобы набить руку перед экзаменом.
Частые вопросы
Какой способ чтения файла быстрее всего в Python?
Прямая итерация по объекту файла в цикле for line in f работает быстрее всего и практически не расходует оперативную память.
Как избежать ошибки MemoryError при обработке огромных файлов?
Не считывай весь файл целиком через readlines(), а обрабатывай данные потоково строка за строкой внутри одного цикла.
Обязательно ли закрывать файл через f.close()?
Если ты используешь конструкцию with open() as f, файл закрывается автоматически. В коротких скриптах на ЕГЭ Python также закроет его сам при завершении программы.
Как закрепить тему после разбора?
Заходи в бесплатный личный кабинет и тренажёр Просто Урок: там можно сразу порешать реальные экзаменационные номера с мгновенной проверкой ответов.
Проверь себя на реальных заданиях
После такого разбора решите 5–7 заданий подряд — и тема ваша. Тренажёр Просто Урок подберёт их автоматически, ошибки объяснит по шагам. Бесплатно, в браузере.