考虑以下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很明显,Export没有用,因为引号没有正确转义.
根据我在Wikipedia’s entry on CSV正确总结的RFC,导出上述数组的正确方法如下:
a b c, "1,2,3"
"i ""heart"" you", "i "",heart"" u, too"
导入上述内容也不会产生原始数组.
所以进口也被打破了.
我已经向support@wolfram.com报告了这些错误,但我想知道其他人是否在此期间有变通办法.
一种解决方法是仅使用TSV而不是CSV.
我用TSV测试了上面的内容,它似乎工作(即使嵌入在数组条目中的选项卡).
最佳答案 而不是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等.
> Tabular & Spreadsheet Formats
> Scientific & Medical Data Formats
> WDX Format(Wolfram Data eXchange格式)
您可能还会发现其中一些更快,因为其中一些是二进制的,因此无法进行文本解析.这一切都取决于您的应用程序以及Mathematica之外的文件用途.