CSV

29 июня 2026 · ~12 мин чтения

формат-данных csv таблицы обмен-данными стандарт

CSV

CSV (Comma-Separated Values, «значения, разделённые запятыми») — это текстовый формат таблицы: каждая строка файла — одна строка таблицы, ячейки внутри строки разделены запятой (или другим символом). Самый старый и самый универсальный язык, на котором программы обмениваются табличными данными.

История

CSV — один из тех форматов, у которых нет ни «дня рождения», ни автора. Просто так сложилось.

Никакой компании или фонда, который бы «владел» CSV, не существует. Формат полностью открытый, и любой инструмент в мире его понимает — хотя бы на базовом уровне.

Что это такое

Представь обычную таблицу в Excel: первая строка — заголовки столбцов, дальше идут строки с данными. CSV — это та же таблица, но записанная в виде обычного текстового файла, который можно открыть в Блокноте.

Минимальный пример:

name,age,city
Анна,32,Москва
Борис,45,Петербург
Виктор,28,Казань

Это таблица из трёх столбцов и трёх строк данных. Каждая строка файла соответствует одной строке таблицы. Запятая разделяет ячейки внутри строки. Перевод строки разделяет строки.

Главные принципы:

  1. Текстовый формат. Файл состоит из обычных символов — букв, цифр, знаков препинания. Никаких бинарных хитростей, никакой сжатой структуры. Открыл в любом редакторе — увидел содержимое.
  2. Плоская структура. Нет вложенности, нет деревьев, нет ссылок. Только строки и столбцы. То, что не помещается в эту матрицу, в CSV выразить нельзя.
  3. Без типов. В CSV нет понятия «это число, а это дата». Всё — текст. Получатель сам решает, как интерпретировать 42 — как число или как строку из двух цифр.
  4. Без схемы. Файл не описывает сам себя. Если первая строка не содержит заголовков — приходится догадываться, что означает каждый столбец.

CSV vs JSON. JSON хранит вложенные структуры (объекты внутри объектов, массивы внутри объектов), CSV — только плоскую таблицу. JSON помнит типы (число это число, строка это строка), CSV — нет. Зато CSV занимает меньше места и читается быстрее: в JSON каждое поле пишется со своим именем в каждой записи, в CSV имена столбцов записаны один раз сверху.

CSV vs Excel (.xlsx). Excel — это zip-архив с XML внутри, который хранит таблицу, формулы, форматирование, цвета ячеек, графики. CSV — голые значения без всякого оформления. Excel-файл всегда читается одинаково, CSV — зависит от того, чем открываешь.

Аналогии из жизни

Бухгалтерская книга-разлиновка. Большая разлинованная тетрадь, где каждая строчка — одна операция, каждая колонка — параметр (дата, сумма, контрагент). CSV — это та же тетрадь, только в цифровом виде. Аналогия точно ложится: тот же принцип «строки-колонки-без-оформления».

Где ломается: в бумажной книге можно написать примечание на полях, нарисовать стрелку, выделить цветом. В CSV — нельзя. Любая «нестрочная» информация исчезает при экспорте.

Список покупок на холодильнике. Каждая строчка — товар: «молоко 2 шт; хлеб 1 шт; яблоки 1 кг». Если ты везде ставишь точку с запятой, кто угодно может потом разобрать твой список и подсчитать общую массу — потому что разделитель один и тот же.

Где ломается: как только в названии товара появится точка с запятой («сок “Добрый” — 1 л; яблочный»), всё посыплется. Программа разобьёт это название на два «куска». Та же беда у CSV — если в самих данных встречается разделитель, нужны кавычки и экранирование.

Музыкальная партитура. Каждая строка — такт, каждая клеточка — нота. Любой музыкант в мире может прочесть твою партитуру, потому что нотная запись стандартизирована. CSV — такая же «партитура» для табличных данных: чем угодно её прочти, увидишь те же столбцы и строки.

Где ломается: партитура передаёт только высоту и длительность нот, но не передаёт интонацию или эмоции исполнителя. CSV тоже передаёт только сырые значения — без формул, без формата дат, без цветовой раскраски. То, что было в Excel красивым отчётом с диаграммами, после экспорта в CSV становится скучной матрицей чисел.

Как это работает

В простом случае CSV — это просто текстовый файл, где:

Но в реальной жизни почти всегда сложнее. Разберём по пунктам.

1. Разделитель. Каноническая запятая работает в англоязычном мире, где в числах используется точка как десятичный разделитель (3.14). В России и Европе в числах десятичный разделитель — запятая (3,14), и если такой числовой столбец сохранить как «значения через запятую», программа запутается. Поэтому в русских/европейских CSV разделителем часто становится точка с запятой (;), а в системах вроде Unix — табуляция (\t, такой формат называют TSV, Tab-Separated Values). Разделитель не записан в самом файле — получатель должен знать заранее, иначе угадывает.

2. Кавычки и экранирование. Что делать, если внутри ячейки есть сам разделитель — запятая, точка с запятой или перевод строки? Стандарт говорит: оборачивай такие ячейки в двойные кавычки.

id,name,note
1,"Иванов, А.","имя, отчество в одной ячейке"
2,"Петров","комментарий с
переводом строки"

А если внутри ячейки нужна сама двойная кавычка — её удваивают:

3,"фирма ""Восход""","коммент"

Это и есть «правила экранирования по RFC 4180». Многие парсеры (программы, которые читают CSV) умеют это, но многие — нет, и тогда возникают ошибки.

3. Заголовки. Первая строка по соглашению содержит названия столбцов. Соглашение — не обязаловка: некоторые CSV приходят без заголовков, и получатель должен знать порядок столбцов по документации. Это частый источник ошибок: добавили столбец в середину выгрузки — все скрипты на той стороне читают данные «не из той колонки» и тихо ломаются.

4. Кодировка. Самая большая боль. CSV — текст, а текст в файле кодируется в одной из кодировок: UTF-8 (современный стандарт), Windows-1251 (старый русский), CP1252 (старый английский). Если выгрузили в одной кодировке, а получатель прочёл в другой — на месте русских букв появятся «кракозябры»: Иванов вместо Иванов. Excel в Windows исторически открывает CSV в Windows-1251, и UTF-8 файлы там показываются неправильно — пока не сохранишь специально с пометкой «UTF-8 with BOM».

5. Парсинг. Программа, читающая CSV, делает примерно так (это и называется «парсер CSV»):

для каждой строки файла:
    если ячейка начинается с кавычки:
        читаем символы до закрывающей кавычки
        (учитываем удвоенные кавычки внутри)
    иначе:
        читаем символы до следующего разделителя
    добавляем ячейку в текущую строку

В нормальном языке программирования никто не пишет это руками — есть готовые библиотеки: csv в Python, xsv или csvkit в командной строке, read.csv в R, Papa Parse в JavaScript. Они умеют все варианты разделителей, кодировок и кавычек.

6. Чтение «потоком». Большое достоинство CSV — его можно читать построчно, не загружая весь файл в память. Файл на 10 ГБ читается строка за строкой, обрабатывается, и память расходуется только на одну строку за раз. С JSON или XML такое сделать гораздо сложнее — там структура цельная, без чёткого «конца записи». Это причина, почему аналитики любят CSV для больших выгрузок: 100 миллионов строк можно перемолоть простым скриптом.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

CSV пользуются буквально все, кто работает с данными — назвать конкретные компании невозможно, проще назвать тех, кто не пользуется (никто).

Более интересные цифры:

Если коротко: каждый, кто хоть раз нажимал «Сохранить как» в Excel и видел опцию «CSV (разделители — запятые)», уже знаком с этим форматом.

Альтернативы и конкуренты

JSON. Плюсы: вложенные структуры, типы данных, понятен веб-разработчикам, де-факто стандарт API. Минусы: больше места, медленнее парсится для больших таблиц, нет потокового чтения «из коробки».

XML. Плюсы: жёсткая схема (XSD), валидация, поддержка пространств имён, отлично для документов с разметкой. Минусы: громоздкий (на каждое поле — открывающий и закрывающий тег), медленнее, для табличных данных избыточен.

Excel (.xlsx). Плюсы: сохраняет форматирование, формулы, графики, листы; знаком любому офисному сотруднику. Минусы: бинарный (точнее, zip+XML), нельзя редактировать в обычном текстовом редакторе, сложнее парсить программно, привязан к Microsoft (хотя есть открытые библиотеки).

Parquet. Плюсы: колоночное хранение, отличное сжатие, в 10–100 раз быстрее CSV для аналитики, типизированные данные. Минусы: бинарный, нельзя открыть в Блокноте, нужен специальный инструмент для просмотра. Используется в дата-инженерии (Spark, Hadoop, современные хранилища данных).

TSV (Tab-Separated Values). Плюсы: тот же CSV, но разделитель — табуляция; почти нет проблем с экранированием (в данных табуляция встречается редко). Минусы: невидимый разделитель (визуально не отличишь от пробелов), Excel не всегда открывает корректно.

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера готовил пакет номеров для контактного центра: семь групп застройщиков, 146 строк. Это была CSV-таблица «номер → застройщик». Внутри обработки скрипт находил дубли (один номер у двух застройщиков сразу), удалял их по правилу, пропускал через фильтр чёрного списка, формировал превью и отправлял по группам в КЦ. Каждый шаг конвейера читал и переписывал CSV — это самый удобный формат, когда нужно передать таблицу из одного шага в другой и при необходимости открыть глазами в Numbers, чтобы проверить, что данные не поехали.

Краткое резюме