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
