Какие метаданные «sep =» вы можете добавить в CSV?

24

Пытаясь выяснить, как заставить CSV правильно открываться в Excel на испанском ПК (принадлежащем клиенту), я нашел много ответов, рекомендующих использовать sep=,в верхней части файла:

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

Моя главная проблема заключается в том, является ли это особенность Excel . Я подозреваю, что это так, но не нашел ничего определенного, чтобы подтвердить это.

Некоторые связанные вопросы:

  • Какие символы можно использовать в этой настройке?
  • Какие другие настройки доступны (например, символ завершения строки, символ кавычки и т. Д.).
  • Существуют ли другие инструменты, которые официально поддерживают эту функцию?

Я надеюсь, что где-то есть документация, на которую кто-то может указать мне, который ответит на все эти вопросы и многое другое; Я просто не смог найти его.

Некоторые уточнения:

sep=Не является параметром для синтаксического анализатора. Он предназначен для размещения внутри CSV. Пример:

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"
Бурхан Али
источник
4
Да, это специфично для Excel .
Raystafarian
2
Вы смогли получить что-нибудь по этому поводу? Я озадачен тем же вопросом, и мне еще предстоит найти какие-либо спецификации MS, описывающие эту функцию. Если эта функция недокументирована MS, как, черт возьми, она вообще появилась?
toddlermenot
@toddlermenot К сожалению, нет. Все, что я получаю, - это люди, которые утверждают, что это специфично для Excel, и ничто не подкрепляет это утверждение, что разочаровывает.
Бурхан Али

Ответы:

7

RFC 4180 широко признан в качестве стандарта для формата CSV и не упоминает ни одной такой функции.

Модель W3C для табличных данных и метаданных в Интернете упоминает ее как функцию, не входящую в сферу их применения:

Многие файлы CSV встраивают метаданные, например, в строки перед строкой заголовка документа CSV. Эта спецификация не определяет форматы для встраивания метаданных в файлы CSV, кроме имен столбцов в строке заголовка.

Поэтому, хотя я не нашел прямого доказательства того, что эта функция специфична для Excel, это, очевидно, все еще имеет место, поскольку, похоже, нет документа по стандартизации, охватывающего эту функцию.

Стефан Кёгл
источник
Хороший источник. Я должен сказать одно: sep = | определяет разделитель для использования в Excel в качестве символа канала ('|'). Он не широко используется, но не является эксклюзивным для Excel. Это директива сепаратора. Международные версии Excel iirc имеют разные символы, например, европейский язык на машине с Excel использует точки с запятой.
var firstName
1
Я знаю об использовании (возможно, это не совсем понятно из моего ответа). Я просто указывал, что, похоже, Excel ввел эту функцию, поскольку она основана на каком-либо (публичном) стандарте.
Стефан Кёгл
0

Чтобы ответить на один из ваших вопросов: «Есть ли другие инструменты, которые официально поддерживают эту функцию?»

Это не поддерживается Apple Numbers (я тестировал, используя Numbers версии 3.6.2).

Он также не поддерживается ни csv2json ( https://www.npmjs.com/package/csv2json ), ни csvtojson ( https://www.npmjs.com/package/csvtojson ).

kintel
источник
-1

Инструкция sep = используется во всех странах, где запятая используется в качестве десятичного разделителя, как в Италии. Поскольку Excel экспортирует CSV, используя точки с запятой вместо запятых в этих странах, если вы хотите быть уверенным, что файл можно прочитать в США или других странах, вам НУЖНО

= сентября;

в верхней части файла. Это специфично для Excel и может игнорироваться другими приложениями.

Дарио де Джудисибус
источник
-2

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

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

Одна историческая система, с которой я столкнулся, использовала новую строку для конца поля, 2 пустые строки для конца записи и *!*!* END *!*!*для конца данных. Я обычно сталкивался со всеми ,\t|:используемыми в качестве разделителя полей вместе с различными управляющими символами.

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

Например, чтобы ответить на вторую часть вашего вопроса, Python включает в себя одну из стандартных библиотек для чтения / записи csv, которая предлагает следующие опции:

  • delimiter- Это разделитель полей (если не экранировано).
  • doublequote- Если это правда то " в поле будет представлено как""
  • escapechar- удаляет любое специальное значение из любого последующего символа, например, если он установлен, \то кавычка может быть представлена ​​как\"
  • lineterminator- как правило , один из \n, \r, \r\nили\n\r
  • quotechar- символ, используемый для цитирования строк, обычно "или'
  • quoting - пометить как одно из:
    • ALL - Каждое поле в кавычках, то есть: "1","Free Beer","ASAP"
    • MINIMAL - Только кавычки поля, которые имеют специальные символы, то есть: 1,"Beer, (Free)", Now, Please
    • QUOTE_NONNUMERIC - Цитировать все, что не является числом, то есть: 1,"Beer, (Free)", "Now", "Please"
    • NONE - Не указывайте вместо этого побег, то есть: 1,Beer\, (Free), Now, Please
  • skipinitialspace- пропустите любой начальный пробел каждого поля, чтобы вы могли использовать его , вместо ,разделителя полей.

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

Стив Барнс
источник
2
Это не отвечает на мой вопрос. Это объясняет, что такое CSV, о которых я уже знаю. Мой вопрос о конкретном фрагменте синтаксиса. Могу ли я добавить какую-либо информацию в свой вопрос, чтобы прояснить ситуацию?
Бурхан Али
1
Спасибо, но это все равно не помогает. sep=не является параметром для парсера. Я добавил некоторые уточнения к своему вопросу.
Бурхан Али
1
@SteveBarnes Но разрешает ли какой-либо инструмент, например упоминаемую вами библиотеку Python, опции как часть содержимого файла? Это, я думаю, главный вопрос.
Рэнди Оррисон
1
«Потому что они одна из многих странностей». Это правда? Это часть того, что я пытаюсь решить. Я не хочу знать, что такое CSV. Я не хочу знать, как разобрать CSV. Я хочу знать, что sep=это и откуда.
Бурхан Али
2
sep = - это метод подсказки для Microsoft Excel, который не включен ни в одну из спецификаций сторонних разработчиков, которые я могу найти. Это происходит от части Microsoft.
Стив Барнс