Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Mathematica中,CSV的导入和导出都已中断_Arrays_File_File Io_Csv_Wolfram Mathematica - Fatal编程技术网

Arrays 在Mathematica中,CSV的导入和导出都已中断

Arrays 在Mathematica中,CSV的导入和导出都已中断,arrays,file,file-io,csv,wolfram-mathematica,Arrays,File,File Io,Csv,Wolfram Mathematica,考虑以下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,很明显导出不起作用,因为引号没有正确转义 根据正确总结的,导出上述数组的正确方法如下: a b c, "1,2,3" "i ""heart"" you", "i "",heart""

考虑以下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,很明显导出不起作用,因为引号没有正确转义

根据正确总结的,导出上述数组的正确方法如下:

a b c, "1,2,3"
"i ""heart"" you", "i "",heart"" u, too"
导入上述内容也不会生成原始数组。 因此,进口也被打破

我已经将这些bug报告给了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
请注意,
导入
/
导出
导入字符串
/
导出字符串
采用相同的选项,后者的功能只是读取/写入字符串而不是文件

您还可以使用Mathematica支持的其他表格/科学数据格式,如XLS、ODS、HDF、HDF5、CDF、FITS等

  • (Wolfram数据交换格式)

您还可能会发现其中一些更快,因为其中一些是二进制的,因此不需要进行文本解析。这完全取决于您的应用程序以及该文件在Mathematica之外的用途。

如果这让您感到不安,请尝试导入[Export[“string.csv”,x,“csv”]],这可能会毁了您的一天。抱歉。@High Performance Mark:我试过了,但在使用显式“CSV”参数时没有发现任何区别。你是什么意思?Wolfram的回复:谢谢你花时间给我们发送这份报告。我已将您的示例转发给我们的开发小组。此问题的建议解决方案是使用不同的格式。对于由此问题造成的不便,我们深表歉意。我包含了您的联系信息,以便在解决此问题时通知您。顺便说一句。仍然存在于Mathematica 10中。快6年了!好主意。虽然我想我们可以用转义单引号和双引号来编造一个例子,这会使你的版本和我的版本以同样的方式崩溃;这就是变通方法的本质=)您还可以使用Mathematica支持的其他表格/科学数据格式之一,如XLS、ODS、HDF、HDF5、CDF、FITS等。您可能会发现其中一些格式更快,因为其中一些是二进制的,因此不需要进行文本解析。这完全取决于您的应用程序以及该文件在Mathematica之外的用途。谢谢Michael。好的想法;你应该把这部分作为你答案的一部分!