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

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

Формат файла CSV не полностью стандартизирован. Основная идея разделения полей запятой ясна, но ситуация усложняется, когда данные поля также содержат запятые или встроенные разрывы строк . Реализации CSV могут не обрабатывать такие данные поля или они могут использовать кавычки, чтобы заключить поле. Цитирование не решает всего: в некоторые поля могут потребоваться встроенные кавычки, поэтому реализация CSV может включать escape-символы или escape-последовательности.

Кроме того, термин «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 поддерживал их в 1972 году. [6] Направляемый по списку («свободная форма») ввод / вывод был определен в FORTRAN 77 , одобренном в 1978 году. При вводе со списком использовались запятые или пробелы в качестве разделителей, поэтому строки символов без кавычек не могли содержать запятых или пробелов. [7]

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

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

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

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

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

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

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

Пакет табличных данных без трения OKI [ править ]

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

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

Стандарт табличных данных Интернета W3C [ править ]

В 2013 году рабочая группа W3C «CSV в Интернете» начала определять технологии, обеспечивающие более высокую совместимость веб-приложений, использующих CSV или аналогичные форматы. [18] Рабочая группа завершила свою работу в феврале 2016 г. и официально закрыта в марте 2016 г. с выпуском набора документов и рекомендаций W3C [19] по моделированию «Табличные данные», [20] и расширению 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, Форд, E3502000, Меркурий, Пума

Пример [ править ]

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

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

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

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

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

Год; Марка; Модель; Длина1997; Ford; E350; 2,352000; Меркурий; Кугуар; 2,38

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

Поддержка приложений [ править ]

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

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

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

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

См. Также [ править ]

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

Ссылки [ править ]

  1. ^ а б в г Шафранович Ю. (октябрь 2005 г.). Общий формат и тип MIME для файлов CSV . IETF . п. 1. дои : 10,17487 / RFC4180 . RFC 4180 . CS1 maint: ref = harv ( ссылка )
  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)» . Проверено 22 декабря 2020 года .
  12. ^ См. Sparql11-results-csv-tsv , первую рекомендацию W3C, охватываемую CSV и заполняющую некоторые недостатки RFC4180.
  13. ^ "RFC 7111: идентификаторы фрагментов URI для типа носителя text / csv" . Проверено 22 декабря 2020 года .
  14. ^ «Модель табличных данных и метаданных в Интернете - Рекомендация W3C 17 декабря 2015 г.» . Проверено 23 марта 2016 года .
  15. ^ * Creativyst (2010), Как сделать: формат файла значений , разделенных запятыми (CSV) , creativyst.com , получено 24 мая 2010 г.
  16. ^ "Пакет табличных данных" . Характеристики данных без трения .
  17. ^ "CSV Диалект" . Характеристики данных без трения .
  18. ^ "CSV в веб-рабочей группе" . W3C CSV WG. 2013 . Проверено 22 апреля 2015 .
  19. ^ CSV в веб-репозитории (на GitHub)
  20. ^ Модель табличных данных и метаданных в Интернете (рекомендация W3C)
  21. ^ Шафранович (2005) утверждает: «В заголовке и каждой записи может быть одно или несколько полей, разделенных запятыми».
  22. ^ "EmacsWiki: Csv Nav" .

Дальнейшее чтение [ править ]

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