Значения, разделенные запятыми ( CSV ) — это формат текстового файла , в котором для разделения значений используются запятые , а для разделения записей — символы новой строки . Файл CSV хранит табличные данные (числа и текст) в виде обычного текста , где каждая строка файла обычно представляет одну запись данных . Каждая запись состоит из одинакового количества полей , и они разделены запятыми в файле CSV. Если сам разделитель полей может появляться внутри поля, поля могут быть заключены в кавычки. [3]
Формат файла CSV является одним из типов форматов файлов с разделителями . [4] Часто используемые разделители включают запятую, табуляцию , пробел и точку с запятой. Файлы с разделителями часто получают расширение ".csv" , даже если разделитель полей не является запятой. Многие приложения или библиотеки, которые потребляют или создают файлы CSV, имеют возможность указать альтернативный разделитель. [5]
Несоблюдение стандарта CSV RFC 4180 требует поддержки различных форматов CSV в программном обеспечении для ввода данных. Несмотря на этот недостаток, CSV по-прежнему широко распространен в приложениях для работы с данными и широко поддерживается различным программным обеспечением, включая распространенные приложения для работы с электронными таблицами, такие как Microsoft Excel . [6] Преимущества, приводимые в пользу CSV, включают в себя удобочитаемость и простоту формата. [ необходима цитата ]
CSV — это распространенный формат обмена данными , который широко поддерживается потребительскими, деловыми и научными приложениями. Среди его наиболее распространенных применений — перемещение табличных данных [7] [8] между программами, которые изначально работают в несовместимых (часто запатентованных или недокументированных) форматах. [1] Например, пользователю может потребоваться перенести информацию из программы базы данных, которая хранит данные в запатентованном формате, в электронную таблицу , которая использует совершенно другой формат. Большинство программ баз данных могут экспортировать данные в формате CSV. Большинство программ электронных таблиц могут читать данные CSV, что позволяет использовать CSV в качестве промежуточного формата при переносе данных из базы данных в электронную таблицу.
CSV также используется для хранения данных. Распространенные инструменты науки о данных, такие как Pandas, включают возможность экспорта данных в CSV для долгосрочного хранения. [9] Преимущества CSV для хранения данных включают простоту CSV, что делает разбор и создание CSV-файлов простыми и быстрыми в реализации по сравнению с другими форматами данных, удобство чтения человеком, что упрощает редактирование или исправление данных, [10] и высокую сжимаемость, что приводит к меньшим файлам данных. [11] С другой стороны, CSV не поддерживает более сложные связи данных и не делает различий между нулевыми и пустыми значениями, и в приложениях, где требуются эти функции, предпочтительны другие форматы.
RFC 4180 предлагает спецификацию для формата CSV; однако реальная практика часто не следует RFC, и термин «CSV» может относиться к любому файлу, который: [1] [12]
В рамках этих общих ограничений используется множество вариаций. Поэтому без дополнительной информации (например, соблюдается ли RFC 4180) файл, заявленный просто как имеющий формат "CSV", не полностью определен. В результате некоторые приложения, поддерживающие файлы CSV, имеют мастера импорта текста, которые позволяют пользователям предварительно просматривать первые несколько строк файла, а затем указывать символ(ы) разделителя, правила кавычек и обрезку полей.
Значения, разделенные запятыми, представляют собой формат данных, который появился более чем на десятилетие раньше персональных компьютеров : компилятор IBM Fortran (уровень H extended) под управлением OS/360 поддерживал CSV в 1972 году. [13] Управляемый списком ввод/вывод («свободная форма») был определен в FORTRAN 77 , одобренном в 1978 году. Управляемый списком ввод использовал запятые или пробелы в качестве разделителей, поэтому строки символов без кавычек не могли содержать запятые или пробелы. [14]
Термин «значение, разделенное запятыми» и аббревиатура «CSV» использовались к 1983 году. [15] В руководстве к компьютеру Osborne Executive, в состав которого входила электронная таблица SuperCalc , описывается соглашение о кавычках CSV, позволяющее строкам содержать встроенные запятые, но в руководстве не указано соглашение о встраивании кавычек в заключенные в кавычки строки. [16]
Списки значений, разделенных запятыми, проще вводить (например, на перфокартах ), чем данные, выровненные по фиксированным столбцам, и они менее склонны к получению неверных результатов, если значение было смещено на один столбец от предполагаемого места.
Файлы, разделенные запятыми, используются для обмена информацией базы данных между машинами двух разных архитектур. Простой текстовый характер файлов CSV в значительной степени позволяет избежать несовместимостей, таких как порядок байтов и размер слова . Файлы в значительной степени читабельны для человека, поэтому с ними легче иметь дело при отсутствии идеальной документации или коммуникации. [17]
Основная инициатива по стандартизации — преобразование « де-факто нечеткого определения» в более точное и юридическое — была принята в 2005 году с RFC 4180, определяющим CSV как тип содержимого MIME . [18] Позднее, в 2013 году, некоторые недостатки RFC 4180 были устранены с помощью рекомендации W3C. [19]
В 2014 году IETF опубликовала RFC 7111, описывающий применение фрагментов URI к документам CSV. RFC 7111 определяет, как можно выбирать диапазоны строк, столбцов и ячеек из документа CSV с использованием индексов позиций. [20]
В 2015 году W3C , пытаясь улучшить CSV с помощью формальной семантики , опубликовал первые проекты рекомендаций по стандартам метаданных CSV, которые изначально были рекомендациями в декабре того же года. [21]
Форматы CSV лучше всего использовать для представления наборов или последовательностей записей, в которых каждая запись имеет идентичный список полей. Это соответствует одному отношению в реляционной базе данных или данным (но не вычислениям) в типичной электронной таблице.
Формат появился еще на заре бизнес-вычислений и широко используется для передачи данных между компьютерами с разными внутренними размерами слов, требованиями к форматированию данных и т. д. По этой причине файлы CSV распространены на всех компьютерных платформах.
CSV — это текстовый файл с разделителями , в котором для разделения значений используется запятая (многие реализации инструментов импорта/экспорта CSV допускают использование других разделителей; например, использование строки «Sep=^» в качестве первой строки в файле *.csv приведет к тому, что Excel откроет файл, ожидая, что разделителем будет символ «^» вместо запятой «,»). Простые реализации CSV могут запрещать значения полей, содержащие запятую или другие специальные символы, такие как символы новой строки. Более сложные реализации CSV разрешают это, часто требуя символы « ( двойные кавычки ) вокруг значений, содержащих зарезервированные символы (такие как запятые, двойные кавычки или, реже, символы новой строки). Встроенные символы двойных кавычек затем могут быть представлены парой последовательных двойных кавычек [22] или путем добавления к двойной кавычке символа escape-символа, такого как обратная косая черта (например, в Sybase Central).
Форматы CSV не ограничены определенным набором символов . [1] Они работают как с наборами символов Unicode (такими как UTF-8 или UTF-16 ), так и с ASCII (хотя определенные программы, поддерживающие CSV, могут иметь свои собственные ограничения). Файлы CSV обычно выдерживают даже наивную трансляцию из одного набора символов в другой (в отличие от почти всех фирменных форматов данных). Однако CSV не предоставляет никакого способа указать, какой набор символов используется, поэтому это должно быть сообщено отдельно или определено на принимающей стороне (если это возможно).
Базы данных, включающие несколько связей , не могут быть экспортированы как один файл CSV [ требуется ссылка ] . Аналогично, CSV не может естественным образом представлять иерархические или объектно-ориентированные данные. Это связано с тем, что каждая запись CSV должна иметь одинаковую структуру. Поэтому CSV редко подходит для документов, созданных с помощью HTML , XML или других технологий разметки или обработки текста.
Статистические базы данных в различных областях часто имеют в целом реляционную структуру, но с некоторыми повторяющимися группами полей. Например, базы данных здравоохранения, такие как Demographic and Health Survey, обычно повторяют некоторые вопросы для каждого ребенка данного родителя (возможно, до фиксированного максимального количества детей). Системы статистического анализа часто включают утилиты, которые могут «вращать» такие данные; например, «родительская» запись, которая включает информацию о пяти детях, может быть разделена на пять отдельных записей, каждая из которых содержит (a) информацию об одном ребенке и (b) копию всей информации, не относящейся к ребенку. CSV может представлять как «вертикальную», так и «горизонтальную» форму таких данных.
В реляционной базе данных подобные проблемы легко решаются путем создания отдельного отношения для каждой такой группы и соединения «дочерних» записей с соответствующими «родительскими» записями с помощью внешнего ключа (например, идентификационного номера или имени родителя). В языках разметки, таких как XML, такие группы обычно заключаются в родительский элемент и повторяются по мере необходимости (например, несколько <child>
узлов в одном <parent>
узле). Для CSV нет общепринятого решения с одним файлом.
Название «CSV» указывает на использование запятой для разделения полей данных. Тем не менее, термин «CSV» широко используется для обозначения большого семейства форматов, которые различаются во многих отношениях. Некоторые реализации допускают или требуют одинарные или двойные кавычки вокруг некоторых или всех полей; а некоторые резервируют первую запись как заголовок, содержащий список имен полей. Используемый набор символов не определен: некоторые приложения требуют метку порядка байтов Unicode (BOM) для принудительной интерпретации Unicode (иногда даже BOM UTF-8). [1] Файлы, которые используют символ табуляции вместо запятой, можно точнее называть «TSV» для значений, разделенных табуляцией.
Другие различия в реализации включают обработку более распространенных разделителей полей (таких как пробел или точка с запятой) и символов новой строки внутри текстовых полей. Еще одна тонкость — это интерпретация пустой строки: она может быть результатом записи записи из нулевых полей или записи из одного поля нулевой длины; таким образом, ее декодирование неоднозначно.
Технический стандарт RFC 4180 2005 года формализует формат файла CSV и определяет тип MIME "text/csv" для обработки текстовых полей. Однако интерпретация текста каждого поля по-прежнему зависит от приложения. Файлы, соответствующие стандарту RFC 4180, могут упростить обмен CSV и должны быть широко переносимыми. Среди его требований:
Формат может обрабатываться большинством программ, которые заявляют, что читают файлы CSV. Исключениями являются: (a) программы могут не поддерживать переносы строк в полях в кавычках, (b) программы могут путать необязательный заголовок с данными или интерпретировать первую строку данных как необязательный заголовок, и (c) двойные кавычки в поле могут не обрабатываться автоматически правильно.
В 2011 году Open Knowledge Foundation (OKF) и различные партнеры создали рабочую группу по протоколам данных, которая позже развилась в инициативу Frictionless Data. Одним из основных выпущенных ими форматов был Tabular Data Package. Tabular Data Package был в значительной степени основан на CSV, используя его в качестве основного формата передачи данных и добавляя базовые метаданные типа и схемы (CSV не содержит никакой информации о типе, чтобы отличить строку «1» от числа 1). [23]
Frictionless Data Initiative также предоставила стандартный формат описания диалекта CSV для описания различных диалектов CSV, например, для указания разделителя полей или правил кавычек. [24]
В 2013 году рабочая группа W3C «CSV в Интернете» начала специфицировать технологии, обеспечивающие более высокую совместимость веб-приложений, использующих CSV или аналогичные форматы. [25] Рабочая группа завершила свою работу в феврале 2016 года и официально закрылась в марте 2016 года с выпуском набора документов и рекомендаций W3C [26] по моделированию «табличных данных», [27] и улучшению CSV с помощью метаданных и семантики .
Существует множество неофициальных документов, описывающих форматы "CSV". IETF RFC 4180 (кратко изложенный выше) определяет формат для типа MIME "text/csv", зарегистрированного в IANA .
Типичные правила для этих и других спецификаций и реализаций «CSV» следующие:
ord(',')*256..ord(',')*256+255
1997,Форд,E350
"1997","Форд","Е350"
1997,Ford,E350,"Супер, роскошный грузовик"
1997,Ford,E350,"Супер,""роскошный"" грузовик"
1997,Ford,E350,"Купи себе сейчасони идут быстро"
1997, Форд, E350не то же самое, что1997,Форд,E350
1997, "Форд", E350
1997, Ford, E350, "Супер роскошный грузовик"
Лос-Анджелес,34°03′с.ш.,118°15′з.д.Нью-Йорк,40°42′46″с.ш.,74°00′21″з.д.Париж, 48°51′24″ с.ш., 2°21′03″ в.д.
Год,Марка,Модель1997,Форд,E3502000, Меркурий, Кугуар
Приведенную выше таблицу данных можно представить в формате CSV следующим образом:
Год,Марка,Модель,Описание,Цена1997,Ford,E350,"ac, abs, moon",3000.001999,Chevy,"Venture ""Расширенная версия""","",4900.001999,Chevy,"Venture ""Расширенная версия, очень большая""","",5000.001996,Джип,Гранд Чероки,"ОБЯЗАТЕЛЬНО ПРОДАЙТЕ!воздух, люк в крыше, загружен",4799.00
Пример CSV-файла США/Великобритании (где десятичным разделителем является точка, а разделителем значений — запятая):
Год, Марка, Модель, Длина1997,Форд,E350,2.352000,Меркурий,Кугуар,2.38
Пример аналогичного европейского файла CSV/ DSV (где десятичным разделителем является запятая, а разделителем значений — точка с запятой):
Год;Марка;Модель;Длина1997;Форд;E350;2,352000;Меркурий;Кугуар;2,38
Последний формат не соответствует RFC 4180. [28] Соответствие может быть достигнуто путем использования запятой вместо точки с запятой в качестве разделителя и заключения в кавычки всех чисел, имеющих десятичный знак.
Некоторые приложения используют CSV как формат обмена данными для улучшения своей совместимости , экспортируя и импортируя CSV. Другие используют CSV как внутренний формат .
Как формат обмена данными: формат файла CSV поддерживается практически всеми электронными таблицами и системами управления базами данных,
COPY
команду, которая позволяет как сохранять, так и загружать данные в файл и из него. сохраняет содержимое таблицы в файл с именем . [29]COPY (SELECT * FROM articles) TO '/home/wikipedia/file.csv' (FORMAT csv)
articles
/home/wikipedia/file.csv
Как (основное или необязательное) внутреннее представление. Может быть собственным или внешним , но отличается от формата обмена («только экспорт/импорт»), поскольку не обязательно создавать копию в другом формате:
CREATE FOREIGN TABLE
CREATE EXTENSION file_fdw
Формат CSV поддерживается библиотеками, доступными для многих языков программирования . Большинство из них предоставляют способ указать разделитель полей, десятичный разделитель , кодировку символов, правила кавычек, формат даты и т. д.
Программы, работающие с CSV, могут иметь ограничения на максимальное количество строк в файлах CSV. Ниже приведен список распространенного программного обеспечения и его ограничений: [33]
это основные новые возможности языка