Импорт и экспорт для CSV не работает в Mathematica - PullRequest
4 голосов
/ 05 мая 2010

Рассмотрим следующий массив 2 на 2:

x = {{"a b c", "1,2,3"}, {"i \"comma-heart\" you", "i \",heart\" u, too"}}

Если мы экспортируем это в CSV, а затем снова импортируем, мы не получим обратно то же самое:

Import[Export["tmp.csv", d]]

Глядя на tmp.csv, становится ясно, что экспорт не работал, поскольку кавычки не экранированы должным образом.

Согласно RFC , который, как я полагаю, суммирован правильно на Википедиизапись в CSV , правильный способ экспортировать вышеупомянутый массив заключается в следующем:

a b c, "1,2,3"
"i ""heart"" you", "i "",heart"" u, too"

Импорт вышеупомянутого также не приводит к исходному массиву.Таким образом, импорт также нарушен.

Я сообщил об этих ошибках на support@wolfram.com, но мне интересно, есть ли у других в настоящее время обходные пути.

Один из способов - просто использоватьTSV вместо CSV.Я проверил вышеупомянутое с TSV, и это, кажется, работает (даже с вкладками, встроенными в записи массива).

1 Ответ

2 голосов
/ 05 мая 2010

Вместо TSV другим обходным путем является использование другого разделителя:

In[26]:= str = ExportString[x, "CSV", "TextDelimiters"->"'"];
Out[26]= "'a b c','1,2,3'
'i \"comma-heart\" you','i \",heart\" u, too'"

In[27]:= y = ImportString[str, "CSV", "TextDelimiters"->"'"]
Out[27]= {{"a b c", "1,2,3"}, {"i \"comma-heart\" you", "i \",heart\" u, too"}}

In[28]:= x == y
Out[28]= True

Обратите внимание, что Import / Export и ImportString / ExportString принимают одинаковые параметры, последние функции просто читают / пишут строки вместо файлов.

Вы также можете использовать один из других табличных / научных форматов данных, которые поддерживает Mathematica, например XLS, ODS, HDF, HDF5, CDF, FITS и т. Д.

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

...