Табличные данные в Python: строки, столбцы и CSV-идея
Автор: Казачкин Даниил Михайлович · Обновлено
Табличный файл состоит из записей-строк и полей-столбцов. Простое split подходит только для учебного формата без кавычек и разделителей внутри значений. Для настоящего CSV Python предоставляет модуль csv, который знает эти правила.
Чтение строк через csv.reader
Пусть scores.csv содержит заголовок и две записи.
name,score
Аня,84
Илья,91import csv
with open('scores.csv', encoding='utf-8', newline='') as file:
reader = csv.DictReader(file)
total = 0
count = 0
for row in reader:
total += int(row['score'])
count += 1
print(total / count)Ожидается 87.5. DictReader использует заголовки как ключи словаря, но значения остаются строками и требуют int.
Данные нужно проверять
Пустой файл или только заголовок приведёт к делению на ноль. Отсутствующий столбец даст KeyError, неверное число — ValueError. Решите, что требует задача: остановиться с понятным сообщением, пропустить запись или считать файл ошибочным.
Не разбирайте строку name,comment через обычный split(','), если comment может содержать запятую в кавычках. Модуль csv существует именно для таких случаев. Параметр newline='' рекомендован при открытии CSV.
Фильтр записей
Создайте файл с колонками name и score для четырёх учеников. Выведите имена с баллом не меньше 60 и средний балл. Проверьте строку ровно с 60, пустой набор записей и неверный заголовок. Добавьте диагностический print(row) на время, чтобы увидеть фактические строковые значения, затем удалите его из итоговой программы.
Разделитель, кавычки и типы
Создайте CSV, где одно текстовое поле содержит запятую и заключено в кавычки. Сравните результат обычного line.split(',') с csv.reader и найдите разрушенную запись. Затем запишите новый файл через csv.DictWriter с явным набором fieldnames. После чтения преобразуйте числовой столбец и обработайте пустое поле по выбранному правилу. Проверьте round-trip: записанные значения после чтения совпадают с исходной структурой по смыслу. Не сравнивайте только сырой текст файла, потому что допустимое экранирование может выглядеть иначе. Контракт таблицы включает заголовки, типы и политику пропусков.
Практикум: CSV с кавычками и преобразованием типов
Создайте CSV с полями name, city, score, где имя или город содержит запятую в кавычках. Сравните line.split(",") с csv.DictReader и найдите разрушенную запись. После чтения преобразуйте балл в целое, определите правило для пустого поля и соберите ошибки отдельно. Запишите очищенные данные через DictWriter с фиксированными заголовками и прочитайте повторно. Сравнивайте структуры и типы, а не буквальное экранирование файла.
Контрольная точка
Какие проверки относятся к синтаксису CSV, а какие к предметной схеме? Парсер разбирает кавычки, но не знает, что score должен быть числом от 0 до 100.
Частые вопросы
Почему после DictReader все значения остаются строками?
CSV хранит текст и не содержит надёжной информации о типах столбцов. Программа должна явно описать схему, преобразовать числа и даты и обработать пропуски.