Тренажёр: читаем файл с таблицей
Прежде чем решать задачу, надо понять, что лежит в файле: сколько строк, какие колонки, где пропуски, какой диапазон значений. Тренажёр ведёт по шагам и учит это узнавать командами Python.
Зачем разбирать файл
Пока не знаешь, что внутри файла, задачу не решить: сколько там строк, какие колонки, есть ли пустые значения, какой у данных диапазон. Сначала файл «разведывают» — и только потом пишут программу-решение.
Читаем строки и колонки
Файл читают целиком и разбивают на строки, а строку — на поля по разделителю (здесь это ;):
Считаем и проверяем
Число строк — len(rows); уникальные значения — len(set(vals)); минимум и максимум — min и max; сумма — sum. Пропуск — это пустое поле: его находят сравнением == "".
Порядок разбора
Разумно идти так: колонки и шапка → число строк → пропуски в колонке → диапазон (min/max) → уникальные значения. После этого видно, какие команды нужны в решении.
Как пользоваться этим режимом. На каждом шаге прочитайте вопрос, напишите команду в песочнице и нажмите «Выполнить», затем «Проверить»: вывод сверится с эталоном. Если трудно — откройте подсказку и решение, вставьте команду в песочницу.
Мини-разбор: что обычно смотрят в файле
Перед вами одни и те же данные в двух видах: текстовый файл — как он лежит на диске (построчно, поля через разделитель ;) — и таблица, как её читает программа. Это не два разных набора, а одно и то же. Идите по шагам: активный шаг подсвечивает нужное в обоих видах и показывает код с результатом.
Прежде чем что-то считать, посмотри на файл «глазами»: выведи первые строки как текст. Так видно, что разделитель — ;, а первая строка — заголовок.
Первая строка — это названия колонок. Раздели её по ; и получишь список.
Строка-заголовок не считается. Число строк данных — базовая величина: от неё зависят средние и проценты.
Пустое поле между разделителями — это пропуск. Проверь важную колонку: данные могут быть заполнены не везде.
Полезно знать общее число пропусков — сколько полей пустые во всех колонках.
Минимум и максимум показывают масштаб значений и помогают заметить выбросы.
Сколько разных значений в колонке — иначе «сколько городов», «сколько групп». Пропуски не считаем.
Итоговая величина по колонке — часто именно она и нужна в задаче.
Первая строка (0) — заголовок. Дальше по строке на запись, поля разделены ;.
| id | name | city | score |
|---|---|---|---|
| 1 | Аня | Москва | 17 |
| 2 | Борис | 23 | |
| 3 | Вера | Москва | 9 |
| 4 | Глеб | Казань | 42 |
| 5 | Дима | Сочи | 31 |
Клик по шапке — шаг «колонки», по строке — «сколько строк», по пустой ячейке — «пропуски».
lines = open('table.csv').read().splitlines()
for l in lines[:3]:
print(l)id;name;city;score 1;Аня;Москва;17 2;Борис;;23
header = open('table.csv').readline().strip()
print(header.split(';'))['id', 'name', 'city', 'score']
lines = open('table.csv').read().splitlines()
print(len(lines) - 1)5
rows = [l.split(';') for l in open('table.csv').read().splitlines()[1:]]
print(sum(1 for r in rows if r[2] == '')) # колонка city1
rows = [l.split(';') for l in open('table.csv').read().splitlines()[1:]]
print(sum(1 for r in rows for v in r if v == ''))1
rows = [l.split(';') for l in open('table.csv').read().splitlines()[1:]]
vals = [int(r[3]) for r in rows if r[3] != '']
print(min(vals), max(vals))9 42
rows = [l.split(';') for l in open('table.csv').read().splitlines()[1:]]
vals = [r[2] for r in rows if r[2] != '']
print(len(set(vals)))3
rows = [l.split(';') for l in open('table.csv').read().splitlines()[1:]]
print(sum(int(r[3]) for r in rows if r[3] != ''))122