Продвинутый синтаксис
Время: 5-10 мин
open
with
readlines
strip
Работа с файлами (open, read, readlines)
Тема: Чтение текстовых файлов (.txt, .csv) без утечек памяти и кодировки
Файлы используются в Заданиях №9, №10, №17, №24, №26, №27 ЕГЭ. Правильное открытие через менеджер контекста `with` гарантирует надежность.
1. Конструкция with open()
Менеджер контекста with автоматически закрывает файл после выхода из блока, даже если возникла ошибка:
with open('17.txt', 'r', encoding='utf-8') as f:
data = [int(line) for line in f if line.strip()]
Разновидности и прототипы задания на экзамене
1. Чтение всего файла целиком: f.read()
Идеально для Задания №24 (строки):
s = open('24.txt').read().2. Построчное чтение списка чисел: [int(x) for x in f]
Идеально для Задания №17:
nums = [int(x) for x in open('17.txt')].3. Чтение таблицы чисел (Задание 9, 26, 27)
Построчный сплит:
[list(map(int, line.split())) for line in f].Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: Быстрое чтение любых файлов ЕГЭ ===
# 1. Задание 17 (одно число на строку):
# with open('17.txt') as f:
# nums = [int(x) for x in f if x.strip()]
# 2. Задание 24 (одна гигантская строка):
# with open('24.txt') as f:
# text = f.read().strip()
# 3. Задание 26 / 27 (первая строка — N, далее пары чисел):
# with open('26.txt') as f:
# lines = f.readlines()
# n, k = map(int, lines[0].split())
# pairs = [list(map(int, line.split())) for line in lines[1:] if line.strip()]
Типичные ошибки
✕ Не так
# ❌ Ошибка: Забыть убрать символ перевода строки '\n' при чтении строк
lines = open('file.txt').readlines() # строки будут содержать '\n' на конце!
✓ Так
# ✅ Правильно: Применять .strip():
lines = [line.strip() for line in open('file.txt')]
ГРОБ
ЛОВУШКА: Пустая последняя строка в файле
Часто в конце файла есть пустая строка. int('') вызовет ValueError.
Как обойти
Всегда фильтруйте непустые строки:
nums = [int(x) for x in f if x.strip()].Лайфхаки на экзамене
- Вместо
f.readlines()по файлу можно итерироваться напрямую:for line in f:— это экономит оперативную память.