раздел 03 · подстраница 1
CSV, Excel и Google Sheets
Главная суперсила CSV - его понимают и программы, и таблицы. Один и тот же файл ваш код пишет программно, а человек открывает двойным кликом в Excel и правит руками. Это мост между разработкой и обычными людьми, которые живут в таблицах.
CSV это не то же самое, что Excel
Тут легко запутаться. CSV - это простой текстовый формат. Excel-файл (.xlsx) - это сложный бинарный формат с формулами, цветами, несколькими листами и графиками.
| | CSV (.csv) | Excel (.xlsx) | | --- | --- | --- | | Что внутри | обычный текст | бинарный архив | | Формулы, цвета | нет | да | | Несколько листов | нет, один | да | | Открыть в блокноте | да, всё читаемо | нет, мусор | | Читать в коде | очень просто | нужна библиотека |
Excel умеет открывать и сохранять CSV - поэтому их часто путают. Но CSV хранит только сами данные, без оформления и формул. Для обмена данными это плюс: ничего лишнего.
Как отдать пользователю таблицу
Частая задача: пользователь нажимает «Экспорт», получает файл, открывает в Excel. CSV - самый простой способ это сделать.
import csv
def export_orders(orders, path="orders.csv"):
with open(path, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=["id", "client", "total"])
writer.writeheader()
writer.writerows(orders)
Заметьте кодировку utf-8-sig - это важный трюк для Excel, о нём ниже.
Главная боль: Excel и кодировка
Если открыть обычный UTF-8 CSV в Excel на Windows двойным кликом, русский текст часто превращается в кракозябры (Ð�cнна вместо Анна). Excel по умолчанию ждёт другую кодировку.
Разделитель: запятая или точка с запятой
Ещё одна засада с Excel в русской локали. В странах, где десятичный разделитель - запятая (3,14), Excel ожидает в CSV разделитель столбцов точку с запятой (;), а не запятую. Иначе он свалит всю строку в один столбец.
name;age;city
Анна;28;Москва
Поэтому многие выгрузки из российских систем используют ;. При чтении это надо учитывать:
reader = csv.DictReader(f, delimiter=";") # явно указываем разделитель
Google Sheets
Google Sheets дружелюбнее к UTF-8: импорт CSV (Файл → Импорт) обычно проходит без танцев с кодировкой. А ещё Sheets умеет отдавать таблицу как CSV по ссылке - удобно, когда нужно простое «облачное» хранилище, которое редактируют не-программисты, а программа просто скачивает свежий CSV.
Когда таблицы достаточно как «базы данных»
Честно: для многих маленьких проектов Google Sheets - вполне рабочая «база данных». Несколько человек редактируют, программа читает по API. Это нормальный старт, пока:
- данных не десятки тысяч строк;
- не нужен сложный поиск и связи между таблицами;
- одновременных правок немного.
Когда упрётесь в эти границы - пора в настоящую базу (раздел 05).
Антипаттерны
- Слать пользователям UTF-8 CSV без BOM и удивляться кракозябрам. Используйте
utf-8-sigили предупреждайте, как открывать. - Жёстко зашивать разделитель
,, когда данные приходят с;. Проверяйте, чем реально разделён файл. - Путать .csv и .xlsx. Если нужны формулы, несколько листов и оформление - это Excel, и для записи
.xlsxиз кода нужна отдельная библиотека (например, openpyxl).