Из Википедии, свободной энциклопедии
Перейти к навигацииПерейти к поиску

Значения , разделенные запятые ( CSV ) файл является разделителями текстового файла , который использует запятую для разделения значений. Каждая строка файла представляет собой запись данных . Каждая запись состоит из одного или нескольких полей , разделенных запятыми. Использование запятой в качестве разделителя полей является источником имени для этого формата файла . Файл CSV обычно хранит табличные данные (числа и текст) в виде обычного текста , и в этом случае каждая строка будет иметь одинаковое количество полей.

Формат файла CSV не полностью стандартизирован. Разделение полей запятыми - это основа, но запятые в данных или встроенные разрывы строк требуют особой обработки. Некоторые реализации запрещают такой контент, в то время как другие заключают поле в кавычки , что снова создает необходимость в их экранировании, если они присутствуют в данных.

Термин «CSV» также обозначает несколько тесно связанных форматов с разделителями-разделителями, в которых используются другие разделители полей, такие как точки с запятой. [ необходима цитата ] Сюда входят значения, разделенные табуляцией, и значения, разделенные пробелами. Разделитель, который гарантированно не является частью данных, значительно упрощает синтаксический анализ.

Альтернативные файлы с разделителями-разделителями часто [ необходима ссылка ] с расширением .csv, несмотря на использование разделителя полей, отличного от запятой. Эта нечеткая терминология может вызвать проблемы при обмене данными . Многие приложения, которые принимают файлы CSV, имеют опции для выбора символа разделителя и символа кавычки. Запятая часто используется вместо запятых во многих европейских районах , чтобы использовать запятую в качестве десятичного разделителя и, возможно, период в виде десятичной группировки характера. По этой причине термин « значения, разделенные символами» предлагается как более широкое определение этого формата файла. [ кем? ]

Обмен данными

CSV - это распространенный формат обмена данными, который широко поддерживается потребительскими, деловыми и научными приложениями. Среди его наиболее распространенных применений - перемещение табличных данных [3] [4] между программами, которые изначально работают с несовместимыми (часто проприетарными или недокументированными) форматами. [1] Это работает, несмотря на несоблюдение RFC 4180 (или любого другого стандарта), потому что очень много программ поддерживают варианты формата CSV для импорта данных.

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

Спецификация

RFC  4180 предлагает спецификацию формата CSV; однако реальная практика часто не соответствует RFC, и термин «CSV» может относиться к любому файлу, который: [2] [5]

  1. представляет собой простой текст с использованием набора символов , такого как ASCII , различных наборов символов Unicode (например, UTF-8 ), EBCDIC или Shift JIS ,
  2. состоит из записей (обычно по одной записи в строке),
  3. с записями, разделенными на поля, разделенные разделителями (обычно один зарезервированный символ, такой как запятая, точка с запятой или табуляция; иногда разделитель может включать необязательные пробелы),
  4. где каждая запись имеет одинаковую последовательность полей.

В рамках этих общих ограничений используется множество вариаций. Следовательно, без дополнительной информации (например, соблюдается ли RFC 4180) файл, заявленный просто как имеющийся в формате «CSV», не указывается полностью. В результате многие приложения, поддерживающие файлы CSV, позволяют пользователям предварительно просмотреть несколько первых строк файла, а затем указать символ (символы) разделителя, правила цитирования и т. Д. Если варианты конкретного файла CSV выходят за рамки того, что поддерживает конкретная принимающая программа, часто возможно изучить и отредактировать файл вручную (т. е. с помощью текстового редактора ) или написать сценарий или программу для создания соответствующего формата.

История

Значения, разделенные запятыми, - это формат данных, предшествующий персональным компьютерам более чем на десять лет: компилятор IBM Fortran (расширенный уровень H) под OS / 360 поддерживал CSV в 1972 году. [6] Направляемый на список («свободная форма») ввод / вывод был определен в FORTRAN 77 , утвержденном в 1978 году. При вводе со списком использовались запятые или пробелы в качестве разделителей, поэтому строки символов без кавычек не могли содержать запятые или пробелы. [7]

Термин «значения, разделенные запятыми» и аббревиатура «CSV» использовались к 1983 году. [8] В руководстве для компьютера Osborne Executive, в который была включена электронная таблица SuperCalc , задокументировано соглашение о цитировании CSV, которое позволяет строкам содержать встроенные запятые, но в руководстве не указано соглашение о встраивании кавычек в строки, заключенные в кавычки. [9]

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

Файлы, разделенные запятыми, используются для обмена информацией базы данных между машинами двух разных архитектур. Простой текстовый символ файлов CSV в значительной степени позволяет избежать несовместимости, такой как порядок байтов и размер слова . Файлы в значительной степени удобочитаемы, поэтому с ними легче работать при отсутствии идеальной документации или связи. [10]

Основная инициатива по стандартизации - преобразование « де-факто нечеткого определения» в более точное и де-юре - была предпринята в 2005 году , когда был выпущен RFC 4180 , определяющий CSV как тип контента MIME . [11] Позже, в 2013 году, некоторые недостатки RFC 4180 были устранены рекомендацией W3C. [12] 

В 2014 году IETF опубликовал RFC  7111, описывающий применение фрагментов URI к CSV-документам. RFC 7111 определяет, как диапазоны строк, столбцов и ячеек могут быть выбраны из документа CSV с использованием индексов положения. [13]

В 2015 году W3C , пытаясь улучшить CSV с помощью формальной семантики , опубликовал первые проекты рекомендаций для стандартов CSV-метаданных, которые начинались как рекомендации в декабре того же года. [14]

Общие функции

Форматы CSV лучше всего использовать для представления наборов или последовательностей записей, в которых каждая запись имеет идентичный список полей. Это соответствует единственному отношению в реляционной базе данных или данным (но не вычислениям) в типичной электронной таблице.

Этот формат появился на заре бизнес-вычислений и широко используется для передачи данных между компьютерами с разными внутренними размерами слов, требованиями к форматированию данных и т. Д. По этой причине файлы CSV распространены на всех компьютерных платформах.

CSV является разделителями текстового файла , который использует запятую для разделения значений (многие реализации CSV импорта / экспорт инструменты позволяют другие сепараторы , которые будут использоваться, например, использование «= Сен ^» строка в качестве первой строки в *. csv заставит Excel открыть файл, ожидая, что в качестве разделителя будет вставка «^» вместо запятой «,»). Простые реализации CSV могут запрещать значения полей, содержащие запятую или другие специальные символы, такие как символы новой строки . Более сложные реализации CSV разрешают их, часто требуя символов "( двойные кавычки ) вокруг значений, которые содержат зарезервированные символы (например, запятые, двойные кавычки или, реже, символы новой строки). Затем встроенные символы двойных кавычек могут быть представлены парой последовательных двойных кавычек [15] или префиксом двойной кавычки с помощью escape-символа, такого как обратная косая черта (например, в Sybase Central).

Форматы CSV не ограничены определенным набором символов . [1] Они работают с наборами символов Unicode (такими как UTF-8 или UTF-16 ) так же хорошо, как и с ASCII (хотя определенные программы, поддерживающие CSV, могут иметь свои ограничения). Файлы CSV обычно выдерживают даже простой перевод из одного набора символов в другой (в отличие от почти всех проприетарных форматов данных). CSV, однако, не предоставляет никакого способа указать, какой набор символов используется, поэтому он должен передаваться отдельно или определяться на принимающей стороне (если возможно).

Базы данных, которые включают несколько отношений, не могут быть экспортированы как один файл CSV [ необходима ссылка ] . Точно так же CSV не может естественным образом представлять иерархические или объектно-ориентированные данные. Это связано с тем, что каждая запись CSV должна иметь одинаковую структуру. Поэтому CSV редко подходит для документов, созданных с помощью HTML , XML или других технологий разметки или обработки текста.

Статистические базы данных в различных областях часто имеют структуру, подобную отношениям, но с некоторыми повторяющимися группами полей. Например, медицинские базы данных, такие как Demographic and Health Survey, обычно повторяют некоторые вопросы для каждого ребенка данного родителя (возможно, до фиксированного максимального числа детей). Системы статистического анализа часто включают в себя утилиты, которые могут «вращать» такие данные; например, «родительская» запись, которая включает информацию о пяти дочерних элементах, может быть разделена на пять отдельных записей, каждая из которых содержит (а) информацию об одном дочернем элементе и (б) копию всей информации, не относящейся к дочернему. CSV может представлять собой "вертикальную" или "горизонтальную" форму таких данных.

В реляционной базе данных подобные проблемы легко решаются путем создания отдельного отношения для каждой такой группы и соединения «дочерних» записей с соответствующими «родительскими» записями с помощью внешнего ключа (такого как идентификационный номер или имя родительского элемента). В языках разметки, таких как XML, такие группы обычно заключаются в родительский элемент и повторяются по мере необходимости (например, несколько <child>узлов в одном <parent>узле). С CSV нет широко распространенного однофайлового решения.

Программное обеспечение и ограничения строк

Каждое программное обеспечение, работающее с CSV, имеет свои ограничения на максимальное количество строк, которое может иметь файл CSV. Ниже приведен список распространенного программного обеспечения и его ограничений: [16]

  • Microsoft Excel: 1 048 576 строк
  • Apple Numbers: ограничение в 1 000 000 строк.
  • Таблицы Google: ограничение в 5 000 000 ячеек (произведение столбцов и строк)
  • OpenOffice и LibreOffice: 1048576 строк
  • Текстовые редакторы (такие как WordPad, TextEdit, Vim и т. Д.): Без ограничений по строкам или ячейкам

Стандартизация

Имя «CSV» указывает на использование запятой для разделения полей данных. Тем не менее, термин «CSV» широко используется для обозначения большого семейства форматов, которые во многом различаются. Некоторые реализации позволяют или требуют одинарные или двойные кавычки вокруг некоторых или всех полей; а некоторые резервируют первую запись как заголовок, содержащий список имен полей. Используемый набор символов не определен: некоторым приложениям требуется метка порядка байтов Unicode (BOM) для обеспечения интерпретации Unicode (иногда даже BOM UTF-8 ). [1] Файлы, в которых вместо запятой используется символ табуляции, можно более точно называть «TSV» для значений, разделенных табуляцией .

Другие отличия реализации включают обработку более распространенных разделителей полей (таких как пробел или точка с запятой) и символов новой строки внутри текстовых полей. Еще одна тонкость - это интерпретация пустой строки: она может в равной степени быть результатом записи записи из нулевых полей или записи одного поля нулевой длины; при этом расшифровка неоднозначна.

Пакет табличных данных без трения OKI

В 2011 году Open Knowledge Foundation (OKF) и различные партнеры создали рабочую группу по протоколам данных, которая позже превратилась в инициативу Frictionless Data. Одним из основных форматов, которые они выпустили, был пакет табличных данных. Пакет табличных данных в значительной степени основан на CSV, используя его в качестве основного формата передачи данных и добавляя метаданные базового типа и схемы (в CSV отсутствует какая-либо информация о типе, чтобы отличить строку "1" от числа 1). [17]

Инициатива Frictionless Data Initiative также предоставила стандартный формат описания диалектов CSV для описания различных диалектов CSV, например, для указания разделителя полей или правил цитирования. [18]

Стандарт табличных данных Интернета W3C

В 2013 году рабочая группа W3C «CSV в Интернете» начала определять технологии, обеспечивающие повышенную совместимость веб-приложений, использующих CSV или аналогичные форматы. [19] Рабочая группа завершила свою работу в феврале 2016 г. и официально закрыта в марте 2016 г. с выпуском набора документов и рекомендаций W3C [20] для моделирования «табличных данных», [21] и улучшения CSV с помощью метаданных и семантики. .

Стандарт RFC 4180

Технический стандарт 2005 года RFC 4180 формализует формат файла CSV и определяет тип MIME «text / csv» для обработки текстовых полей. Однако интерпретация текста каждого поля по-прежнему зависит от приложения. Файлы, соответствующие стандарту RFC 4180, могут упростить обмен CSV и должны быть широко переносимыми. Среди его требований:

  • Строки в стиле MS-DOS, которые заканчиваются символами (CR / LF) (необязательно для последней строки).
  • Необязательная запись заголовка (нет надежного способа определить, присутствует ли она, поэтому при импорте требуется осторожность).
  • Каждая запись должна содержать одинаковое количество полей, разделенных запятыми.
  • Любое поле можно заключить в кавычки (в двойные кавычки).
  • Поля, содержащие перенос строки, двойные кавычки или запятые, должны быть заключены в кавычки. (В противном случае файл, скорее всего, будет невозможно правильно обработать.)
  • Если для заключения полей используются двойные кавычки, то двойные кавычки в поле должны быть представлены двумя символами двойных кавычек.

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

Основные правила

Существует множество неофициальных документов, описывающих форматы «CSV». IETF RFC 4180 (обобщенный выше) определяет формат MIME-типа «text / csv», зарегистрированный в IANA .

Правила, типичные для этих и других спецификаций и реализаций CSV, следующие:

  • CSV - это формат данных с разделителями , в котором поля / столбцы разделены символом запятой, а записи / строки оканчиваются символом новой строки .
  • Файл CSV не требует определенной кодировки символов , порядка байтов или формата терминатора строки (некоторые программы не поддерживают все варианты конца строки).
  • Запись заканчивается символом конца строки. Тем не менее, терминаторы строки могут быть встроены как данные в поля, поэтому программное обеспечение должно распознавать заключенные в кавычки разделители строк (см. Ниже), чтобы правильно собрать всю запись, возможно, из нескольких строк.
  • Все записи должны иметь одинаковое количество полей в одинаковом порядке.
  • Данные внутри полей интерпретируются как последовательность символов , а не как последовательность битов или байтов (см. RFC 2046, раздел 4.1). Например, числовое количество 65535 может быть представлено как 5 символов ASCII «65535» (или, возможно, в других формах, таких как «0xFFFF», «000065535.000E + 00» и т. Д.); но не как последовательность из 2 байтов, предназначенную для обработки как одно двоичное целое число, а не как два символа (например, числа 11264–11519 имеют запятую в качестве старшего байта :) . Если это соглашение о «простом тексте» не соблюдается, то CSV-файл больше не содержит достаточной информации для его правильной интерпретации, CSV-файл, скорее всего, не переживет передачу между различными компьютерными архитектурами и не будет соответствовать типу MIME text / csv .ord(',')*256..ord(',')*256+255
  • Смежные поля должны быть разделены одной запятой. Однако форматы «CSV» сильно различаются по выбору символа-разделителя. В частности, в языковых стандартах, где запятая используется в качестве десятичного разделителя , вместо нее используются точка с запятой, TAB или другие символы.
    1997, Форд, E350
  • Любое поле может быть заключено в кавычки (то есть заключено в двойные кавычки), а некоторые поля должны быть заключены в кавычки, как указано в следующих правилах и примерах:
    «1997», «Форд», «Е350»
  • Поля со встроенными запятыми или двойными кавычками должны быть заключены в кавычки.
    1997, Ford, E350, «Супер, роскошный грузовик»
  • Каждый из встроенных символов двойных кавычек должен быть представлен парой символов двойных кавычек.
    1997, Ford, E350, «Супер», «роскошный» «грузовик»
  • Поля со встроенными разрывами строк должны быть заключены в кавычки (однако многие реализации CSV не поддерживают встроенные разрывы строк).
    1997, Ford, E350, "Давай, купи сейчас
    они идут быстро "
  • В некоторых реализациях CSV [ какой? ] , начальные и конечные пробелы и табуляторы обрезаются (игнорируются). Такая обрезка запрещена в RFC 4180, который гласит: «Пробелы считаются частью поля и не должны игнорироваться».
    1997, Форд, E350
    не то же самое как
    1997, Форд, E350
  • Согласно RFC 4180, пробелы вне кавычек в поле не допускаются; однако в RFC также говорится, что «Пробелы считаются частью поля и не должны игнорироваться». и «Разработчики должны быть консервативными в том, что вы делаете, и либеральными в том, что вы принимаете от других» (RFC 793, раздел 2.10) при обработке файлов CSV ».
    1997, «Форд», E350
  • В реализациях CSV, которые обрезают начальные и конечные пробелы, поля с такими пробелами как значимые данные должны быть заключены в кавычки.
    1997, Ford, E350, «Супер роскошный грузовик»
  • Обработка двойных кавычек применяется только в том случае, если поле начинается с двойной кавычки. Однако обратите внимание, что двойные кавычки не допускаются в полях без кавычек в соответствии с RFC 4180.
    Лос-Анджелес, 34 ° 03′N, 118 ° 15′W
    Нью-Йорк, 40 ° 42′46 ″ с.ш., 74 ° 00′21 ″ з.д.
    Париж, 48 ° 51′24 ″ с.ш., 2 ° 21′03 ″ в.д.
  • Первая запись может быть «заголовком», который содержит имена столбцов в каждом из полей (нет надежного способа определить, делает ли файл это или нет; однако редко используются символы, отличные от букв, цифр и подчеркивания в таких именах столбцов).
    Год, Марка, Модель
    1997, Форд, E350
    2000, Меркурий, Пума

Пример

Приведенная выше таблица данных может быть представлена ​​в формате CSV следующим образом:

Год, Марка, Модель, Описание, Цена
1997, Ford, E350, "ac, abs, moon", 3000.00
1999, Chevy, "Venture" "Extended Edition" "", "", 4900.00
1999, Chevy, "Venture", "Extended Edition, Very Large" "" ,, 5000.00
1996 г., Jeep, Grand Cherokee, "ДОЛЖЕН ПРОДАВАТЬСЯ!"
воздух, лунная крыша, загруженный », 4799.00

Пример файла CSV для США / Великобритании (где десятичный разделитель - точка / точка, а разделитель значений - запятая):

Год, Марка, Модель, Длина
1997, Форд, E350,2.35
2000, Меркурий, Пума, 2.38

Пример аналогичного европейского файла CSV / DSV (где десятичный разделитель - запятая, а разделитель значений - точка с запятой):

Год; Марка; Модель; Длина
1997; Ford; E350; 2,35
2000; Меркурий; Пума; 2,38

Последний формат несовместим с RFC 4180. [22] Соответствие может быть достигнуто за счет использования запятой вместо точки с запятой в качестве разделителя и либо международной нотации для представления десятичного знака, либо практики цитирования всех чисел, которые имеют десятичный знак.

Поддержка приложений

Формат файла CSV поддерживается почти всеми электронными таблицами и системами управления базами данных, включая Apple Numbers , LibreOffice Calc и Apache OpenOffice Calc. Microsoft Excel также поддерживает CSV, но с ограничениями по сравнению с другим программным обеспечением для работы с электронными таблицами (например, с 2019 года Excel по-прежнему не может экспортировать файлы CSV в обычно используемой кодировке символов UTF-8 ).

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

Emacs редактор может работать в CSV - файлов , используя режим CSV-нав. [23]

Многие служебные программы в системах в стиле Unix (такие как вырезать , вставить , объединить , сортировать , uniq , awk ) могут разбивать файлы по разделителю запятой и, следовательно, могут обрабатывать простые файлы CSV. Однако этот метод неправильно обрабатывает запятые в строках в кавычках.

См. Также

  • Значения, разделенные табуляцией
  • Сравнение форматов сериализации данных
  • Значения, разделенные разделителями
  • Столкновение разделителей
  • Плоская база данных
  • Простой формат данных
  • Замещающий символ , нулевой символ , невидимая запятая U + 2063

Ссылки

  1. ^ a b c d Шафранович Ю. (октябрь 2005 г.). Общий формат и тип MIME для файлов CSV . IETF . п. 1. дои : 10,17487 / RFC4180 . RFC 4180 .
  2. ^ a b Шафранович (2005) утверждает: «Этот RFC документирует формат файлов значений, разделенных запятыми (CSV), и формально регистрирует тип MIME« text / csv »для CSV в соответствии с RFC 2048».
  3. ^ "CSV - значения, разделенные запятыми" . Проверено 2 декабря 2017 .
  4. ^ "Файлы CSV" . Проверено 4 июня 2014 года .
  5. ^ "Стандартный формат файла значений, разделенных запятыми (CSV)" . Edoceo, Inc . Проверено 4 июня 2014 года .
  6. ^ Программные продукты IBM FORTRAN для ОС и компонент CMS VM / 370 Общая информация (PDF) (первое издание), июль 1972 г., стр. 17, GC28-6884-0 , получено 5 февраля 2016 г. Для пользователей, знакомых с предыдущими процессорами FORTRAN IV G и H, это основные новые языковые возможности.
  7. ^ "List-Directed I / O" , Справочник по языку Fortran 77 , Oracle
  8. ^ "SuperCalc², пакет электронных таблиц для IBM, CP / M" . Проверено 11 декабря 2017 года .
  9. ^ «Структура файла формата значений, разделенных запятыми» . Проверено 11 декабря 2017 года .
  10. ^ "CSV, значения, разделенные запятыми (RFC 4180)" . Проверено 4 июня 2014 года .
  11. ^ RFC 4180: Общий формат и тип MIME для файлов с разделителями-запятыми (CSV) . DOI : 10,17487 / RFC4180 . RFC 4180 . Проверено 22 декабря 2020 года .
  12. ^ См. Sparql11-results-csv-tsv , первую рекомендацию W3C, охватываемую CSV и заполняющую некоторые недостатки RFC 4180.
  13. ^ RFC 7111: идентификаторы фрагментов URI для типа носителя text / csv . DOI : 10,17487 / RFC7111 . RFC 7111 . Проверено 22 декабря 2020 года .
  14. ^ «Модель табличных данных и метаданных в Интернете - Рекомендация W3C 17 декабря 2015 г.» . Проверено 23 марта 2016 года .
  15. ^ * Creativyst (2010), Как сделать: формат файла значений , разделенных запятыми (CSV) , creativyst.com , получено 24 мая 2010 г.
  16. ^ «Общие сведения о CSV и ограничениях строк» . Проверено 28 февраля, 2021 .
  17. ^ «Пакет табличных данных» . Характеристики данных без трения .
  18. ^ "CSV Диалект" . Характеристики данных без трения .
  19. ^ "CSV в веб-рабочей группе" . W3C CSV WG. 2013 . Проверено 22 апреля 2015 .
  20. ^ CSV в веб-репозитории (на GitHub)
  21. ^ Модель для табличных данных и метаданных в Интернете (рекомендация W3C)
  22. ^ Шафранович (2005) утверждает: «В заголовке и каждой записи может быть одно или несколько полей, разделенных запятыми».
  23. ^ "EmacsWiki: Csv Nav" .

Дальнейшее чтение

  • "Руководство администратора IBM DB2 - форматы файлов ЗАГРУЗКА, ИМПОРТ и ЭКСПОРТ" . IBM . Архивировано 13 декабря 2016 года . Проверено 12 декабря 2016 . (Имеет описания файлов ASCII (.DEL) с разделителями (включая разделенные запятыми и точкой с запятой) и файлов ASCII без разделителей (.ASC) для передачи данных.)