Открыть сервисСервис

CSV — формат обмена табличными данными

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

Общие сведения

Файл CSV представляет собой обычный текстовый файл, каждая строка которого содержит одну запись (строку таблицы), а поля внутри строки разделены разделителем. Первая строка файла часто содержит заголовки столбцов. Пример содержимого:

`` Имя,Год рождения,Город Пушкин,1799,Москва Лермонтов,1814,Москва Толстой,1828,Ясная Поляна ``

Формат не имеет единого строгого стандарта, однако наиболее авторитетной спецификацией считается RFC 4180 (2005), описывающий структуру CSV на основе RFC 2046 (MIME). Согласно RFC 4180, поля, содержащие разделитель, перевод строки или кавычки, должны заключаться в двойные кавычки, а внутренние кавычки удваиваются.

Синтаксис

Основные правила формата (по RFC 4180):

  • Каждая запись находится на отдельной строке, записи разделяются переводом строки (CRLF в исходной спецификации, допускается также LF).
  • Последняя строка файла может не заканчиваться переводом строки.
  • Первая строка может содержать заголовок с именами полей.
  • Разделитель полей по умолчанию — запятая, но в реальности используются также точка с запятой (;), табуляция (формат TSV), вертикальная черта (|) и другие символы.
  • Пустые поля допускаются и обозначаются двумя соседними разделителями.
  • Поле может быть заключено в двойные кавычки — это обязательно, если оно содержит разделитель, кавычку или перевод строки.

Пример поля с разделителем внутри:

`` "Иванов, Иван","Москва, ул. Тверская, 1" ``

Кодировка

Спецификация RFC 4180 не регламентирует кодировку символов. На практике исторически преобладала кодировка ASCII, однако для неанглийских данных требуется явное определение кодировки. В России и Европе долгое время широко использовалась Windows-1251, в веб-приложениях и современных системах — UTF-8 (нередко с BOM для корректного распознавания Excel). Несоответствие кодировки — одна из частых причин «кракозябр» при открытии CSV-файлов.

Вариации и родственные форматы

ФорматРазделительОтличия
CSVзапятаябазовый формат
TSVтабуляцияиспользуется в Unix-утилитах, базах данных
CSV с ;точка с запятойраспространён в Европе и России (из-за запятой как десятичного разделителя)
DSVпроизвольныйобобщённое название семейства

Формат CSV является частным случаем более обобщённого понятия DSV (Delimiter-Separated Values). Родственные, но более строгие и самодокументируемые форматы — JSON и XML, которые вытесняют CSV там, где важны типизация данных и вложенность.

Поддержка программным обеспечением

CSV поддерживается практически повсеместно:

  • Табличные процессоры: Microsoft Excel, LibreOffice Calc, Google Таблицы — умеют открывать и сохранять CSV (с выбором разделителя и кодировки).
  • Базы данных: PostgreSQL, MySQL, SQLite, Microsoft SQL Server — имеют команды импорта/экспорта в CSV (COPY, LOAD DATA, bcp).
  • Языки программирования: стандартные библиотеки Python (csv), Ruby, PHP (fgetcsv), Java, Go и множество сторонних пакетов.
  • Утилиты Unix: awk, cut, sort, join традиционно работают с разделёнными значениями.

Применение

CSV применяется в сценариях, где важны простота, читаемость «глазами» и максимальная совместимость:

  • обмен данными между системами и организациями (банковские выписки, бухгалтерские отчёты, реестры);
  • выгрузки из баз данных и аналитических систем;
  • загрузка данных в веб-приложения и CRM;
  • хранение наборов данных для машинного обучения и статистики;
  • конфигурационные списки и простые «справочники» в ПО.

Ограничения

  • Отсутствие единого стандарта приводит к несовместимости: разные программы могут использовать разные разделители, кавычки (иногда одинарные), кодировки и правила обработки переводов строк.
  • Формат не поддерживает типизацию данных — все значения текстовые; даты, числа и булевы значения интерпретируются приложением-потребителем.
  • Нет вложенности: иерархические структуры в CSV не выразить.
  • Крупные файлы загружаются в память целиком, что ограничивает размер набора данных.

См. также

  • RFC 4180
  • TSV
  • JSON
  • XML

Источники

  • RFC 4180. Common Format and MIME Type for Comma-Separated Values (CSV) Files
  • RFC 2046. Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
  • Документация Python: модуль csv
  • Документация PostgreSQL: команда COPY
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru