stringtranslate.com

Значения, разделенные запятыми

Значения, разделенные запятыми ( 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]

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

В рамках этих общих ограничений используется множество вариаций. Поэтому без дополнительной информации (например, соблюдается ли 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 и MIME

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

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

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

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

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

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

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

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

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

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

Пример

Приведенную выше таблицу данных можно представить в формате 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 поддерживается практически всеми электронными таблицами и системами управления базами данных,

Как (основное или необязательное) внутреннее представление. Может быть собственным или внешним , но отличается от формата обмена («только экспорт/импорт»), поскольку не обязательно создавать копию в другом формате:

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

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

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

Смотрите также

Ссылки

  1. ^ abcde Шафранович, Ю. (октябрь 2005 г.). Общий формат и тип MIME для файлов CSV. IETF . стр. 1. doi : 10.17487/RFC4180 . RFC 4180.
  2. ^ ab "commaSeparatedText". Документация разработчиков Apple: унифицированные идентификаторы типов . Apple Inc .
  3. ^ "CSV Comma Separated Value File Format - How To - Creativyst - Explored,Designed,Delivered.(sm)". Creativyst Software . Архивировано из оригинала 1 апреля 2021 г. Получено 22 августа 2023 г.
  4. ^ Руководство по администрированию IBM DB2. IBM.
  5. ^ "Каковы доступные форматы". Евростат . Архивировано из оригинала 26 июля 2023 г. Получено 22 августа 2023 г.
  6. ^ "Импорт или экспорт текстовых файлов (.txt или .csv)". Поддержка Microsoft . Получено 2023-08-16 .
  7. ^ "CSV - Значения, разделенные запятыми" . Получено 2017-12-02 .
  8. ^ "CSV-файлы" . Получено 4 июня 2014 г.
  9. ^ "pandas.DataFrame.to_csv — документация pandas 2.0.3". pandas.pydata.org . Получено 2023-08-16 .
  10. ^ "Формат CSV: история, преимущества и почему он все еще популярен". ByteScout . 2021-09-15 . Получено 2023-08-16 .
  11. ^ "Сравнение различных форматов файлов в больших данных". www.adaltas.com . 2020-07-23 . Получено 2023-08-16 .
  12. ^ "Стандартный формат файла значений, разделенных запятыми (CSV)". Edoceo, Inc. Получено 4 июня 2014 г.
  13. ^ IBM FORTRAN Program Products for OS and the CMS Component of VM/370 General Information (PDF) (первое издание), июль 1972 г., стр. 17, GC28-6884-0 , получено 5 февраля 2016 г. Для пользователей, знакомых с предшественниками FORTRAN IV G и H , это основные новые возможности языка.
  14. ^ "List-Directed I/O", Справочник языка Fortran 77 , Oracle
  15. ^ "SuperCalc², пакет электронных таблиц для IBM, CP/M" . Получено 11 декабря 2017 г.
  16. ^ "Структура файла формата значений, разделенных запятыми". 1983 . Получено 11 декабря 2017 .
  17. ^ "CSV, значения, разделенные запятыми (RFC 4180)" . Получено 4 июня 2014 г. .
  18. ^ RFC 4180: Общий формат и тип MIME для файлов со значениями, разделенными запятыми (CSV). doi : 10.17487/RFC4180 . RFC 4180 . Получено 22 декабря 2020 г. .
  19. ^ См. sparql11-results-csv-tsv, первую рекомендацию W3C, охватывающую CSV и устраняющую некоторые недостатки RFC 4180.
  20. ^ RFC 7111: Идентификаторы фрагментов URI для типа носителя text/csv. doi : 10.17487/RFC7111 . RFC 7111 . Получено 22 декабря 2020 г. .
  21. ^ "Модель табличных данных и метаданных в Интернете – Рекомендация W3C от 17 декабря 2015 г." . Получено 23 марта 2016 г.
  22. ^ * Creativyst (2010), How To: The Comma Separated Value (CSV) File Format, creativyst.com , получено 24 мая 2010 г.
  23. ^ "Пакет табличных данных". Frictionless Data Specs .
  24. ^ "Диалект CSV". Технические характеристики Frictionless Data .
  25. ^ "CSV в рабочей группе Web". W3C CSV WG. 2013. Получено 22.04.2015 .
  26. ^ CSV в веб-репозитории (на GitHub)
  27. ^ Модель табличных данных и метаданных в Интернете (рекомендация W3C)
  28. ^ Шафранович (2005) утверждает: «В заголовке и каждой записи может быть одно или несколько полей, разделенных запятыми».
  29. ^ "Документация: 14: COPY". PostgreSQL . Получено 2024-05-12 .
  30. ^ "Документация: 14: F.35. postgres_fdw". PostgreSQL. 2022-02-10 . Получено 2022-03-04 .
  31. ^ "Документация: 14: F.14. file_fdw". PostgreSQL. 2022-02-10 . Получено 2022-03-04 .
  32. ^ "EmacsWiki: Csv Nav" . www.emacswiki.org .
  33. ^ "Понимание CSV и ограничений строк" . Получено 28 февраля 2021 г. .

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