20

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

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

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

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

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

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

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

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

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"

4 ответа4

5

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

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

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

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

0

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

= сентябрь;

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

0

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

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

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

-3

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .