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

CSV — текстовый формат табличных данных

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

История

CSV-подобные форматы использовались ещё в 1970-е годы для переноса данных между приложениями и операционными системами. Одним из ранних примеров стал формат вывода данных в системе IBM, а также форматы, применявшиеся в программах для работы с электронными таблицами, таких как VisiCalc и Lotus 1-2-3. С ростом популярности Microsoft Excel в 1990-е годы формат стал де-факто стандартом обмена табличными данными.

В 2005 году организация IETF опубликовала RFC 4180 — документ, описывающий рекомендуемую структуру CSV-файлов. Несмотря на то что RFC 4180 носит информационный (а не обязательный) характер, именно на него чаще всего ссылаются при реализации CSV-парсеров.

Структура файла

CSV-файл состоит из записей (строк), каждая из которых содержит одно или несколько полей. Стандартные правила, описанные в RFC 4180:

  • поля внутри записи разделяются запятыми;
  • записи (строки) разделяются переводом строки (CRLF в оригинальном описании, допускается также LF);
  • каждая запись находится на отдельной строке;
  • последняя запись может, но не обязана заканчиваться переводом строки;
  • в качестве кодировки по умолчанию предполагается US-ASCII, однако на практике широко используются UTF-8 и другие кодировки.

Пример простого CSV-файла:

`` Фамилия,Имя,Город Иванов,Иван,Москва Петров,Пётр,Казань ``

Экранирование специальных символов

Поскольку запятая, кавычки и перевод строки могут входить в содержимое полей, для них предусмотрены правила экранирования:

  • поле, содержащее запятую, кавычку или перевод строки, заключается в двойные кавычки;
  • двойная кавычка внутри такого поля записывается как две подряд кавычки ("").

Пример:

`` "Иванов, Иван","Скажи ""привет""","Москва" ``

Разделители

Несмотря на название, запятая не является единственным разделителем. На практике встречаются несколько вариантов, иногда объединяемых общим термином DSV (Delimiter-Separated Values):

РазделительОбозначениеПримечание
ЗапятаяCSVНаиболее распространённый вариант
Точка с запятойSSVШироко используется в странах, где запятая — десятичный разделитель (Германия, Россия)
ТабуляцияTSVУдобен для данных, содержащих запятые
Вертикальная чертаPSVВстречается реже

Microsoft Excel при открытии CSV-файла автоматически определяет разделитель, ориентируясь на региональные настройки системы.

Преимущества и недостатки

Преимущества:

  • Простота и универсальность: файл читается любым текстовым редактором и поддерживается практически всеми СУБД и языками программирования.
  • Малый размер: формат не содержит служебной разметки, поэтому файлы обычно меньше, чем в XML или JSON.
  • Легкость генерации: записать CSV-файл можно несколькими строками кода на любом языке.
  • Читаемость человеком: данные визуально представлены в виде таблицы.

Недостатки:

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

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

CSV-файлы поддерживаются широким спектром программ:

  • Электронные таблицы: Microsoft Excel, LibreOffice Calc, Google Таблицы, «Р7-Офис».
  • Базы данных: PostgreSQL (команда COPY), MySQL (LOAD DATA), SQLite (.import), Microsoft SQL Server (BULK INSERT).
  • Языки программирования: стандартные библиотеки csv в Python и Ruby, Text::CSV в Perl, csv в R, множественные сторонние пакеты для Java, C#, Go и других языков.
  • СУБД и ETL-инструменты: Apache NiFi, Talend, Microsoft SSIS.

Применение

CSV активно используется для:

  • экспорта и импорта данных из баз данных;
  • обмена данными между программами, например при переносе контактов из почтовых клиентов;
  • хранения больших наборов данных, например выборок статистики, логов, датасетов для машинного обучения;
  • конфигурационных файлов в простых случаях;
  • передачи данных в веб-приложениях.

Альтернативы

Основными альтернативами CSV являются TSV (табуляция в качестве разделителя), JSON и XML. JSON и XML поддерживают типизацию и иерархическую структуру, но требуют больше места и сложнее для чтения человеком. TSV решает проблему запятых в данных, но менее распространён.

См. также

  • RFC 4180
  • TSV
  • JSON
  • Электронная таблица

Источники

  • RFC 4180. Common Format and MIME Type for Comma-Separated Values (CSV) Files
  • Документация Python: модуль csv
  • Документация PostgreSQL: раздел COPY
  • Microsoft Excel Documentation: CSV file format
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru