ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Табличные данные в Python: строки, столбцы и CSV-идея

Автор: · Обновлено

Табличный файл состоит из записей-строк и полей-столбцов. Простое split подходит только для учебного формата без кавычек и разделителей внутри значений. Для настоящего CSV Python предоставляет модуль csv, который знает эти правила.

Чтение строк через csv.reader

Пусть scores.csv содержит заголовок и две записи.

name,score
Аня,84
Илья,91
import 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 хранит текст и не содержит надёжной информации о типах столбцов. Программа должна явно описать схему, преобразовать числа и даты и обработать пропуски.

Источники