CSV и внешние данные: формат, валидация и поток обработки
Автор: Казачкин Даниил Михайлович · Обновлено
Файл позволяет программе работать с данными, которые не вводятся вручную каждый раз. В школьных задачах часто встречаются текстовые файлы, таблицы CSV и наборы строк с числами.
CSV — это простой формат таблицы, где значения разделяются запятыми или точками с запятой.
Чтение строк файла
В учебном примере можно представить содержимое файла списком строк.
lines = [
'name;grade;score',
'Аня;9;82',
'Илья;8;75',
'Маша;9;58',
]
total = 0
count = 0
for line in lines[1:]:
name, grade, score = line.split(';')
grade = int(grade)
score = int(score)
if grade == 9:
total += score
count += 1
print(total / count if count else 0)В настоящей программе строки читаются из файла, но логика обработки такая же.
Что проверять при чтении данных
- Есть ли заголовок таблицы?
- Какой разделитель используется?
- Какие поля нужно преобразовать в числа?
- Что делать с пустыми строками?
- Может ли подходящих записей не оказаться?
Частые ошибки
Школьники часто забывают пропустить строку заголовка, сравнивают числа как строки или делят на ноль, если ни одна строка не подошла под условие. Эти ошибки легко поймать, если заранее продумать формат файла.
Работа с файлами связывает программирование с реальными данными. Она помогает готовиться к задачам ОГЭ и ЕГЭ, где важно не только написать цикл, но и аккуратно разобрать входные строки.
Практикум: надёжный импорт журнала CSV
Определите контракт файла с колонками student, date, minutes. Прочитайте заголовок, проверьте наличие всех полей и преобразуйте минуты в неотрицательное целое. Строки с пустым именем, неверной датой или текстом вместо числа складывайте в отдельный отчёт с номером строки. Добавьте имя Иванов, Иван в кавычках и сравните стандартный CSV-парсер с простым split(","). После импорта проверьте число принятых и отклонённых строк, затем запишите очищенные данные и выполните повторное чтение.
Контрольная точка
Почему ошибка одной строки не должна незаметно превращаться в ноль? Выберите политику — остановить импорт или собрать ошибки — и объясните, как пользователь узнает, какие данные не попали в результат.
Частые вопросы
CSV всегда разделяется запятыми?
Нет, встречаются точка с запятой, табуляция и разные правила кавычек. Разделитель и кодировку лучше задавать явно или определять контролируемым способом, а для разбора использовать библиотеку, учитывающую экранирование.
Связанные исследования
- MapReduce: map, shuffle и reduce на примере Word Count — Разбираем MapReduce без магии: map, shuffle и reduce, Word Count на Python, повтор задач, combiner и границы пакетной модели.
Источники
- Босова Л.Л. Информатика. Базовый курс: учебник для 7-9 классов. - М.: БИНОМ. Лаборатория знаний.
- Поляков К.Ю., Еремин Е.А. Информатика. 10-11 классы. Углубленный уровень.
- Python Documentation: The Python Tutorial.