Database 如何在JULIA中使用writecsv/writedlm写入带标头的输出

Database 如何在JULIA中使用writecsv/writedlm写入带标头的输出,database,julia,export-to-csv,Database,Julia,Export To Csv,下面的代码在Julia中工作,它用一个头写入A,B的值 我想问的是,在writecsv或writedlm Header = ["a" "b"] A= [1,2,3] B=[3,4,5] Data = [Header ; A[:] B[:]] Path = "//OUTPUT//Table//Hydraulic_Inv.csv" println(Path) writecsv(Path ,Data ) 输出 a,b 1,3 2,4 3,5 首先,writecsv在v0.7中被弃用,因

下面的代码在Julia中工作,它用一个头写入
A
B
的值

我想问的是,在
writecsv
writedlm

Header = ["a" "b"]
A= [1,2,3]
B=[3,4,5]
Data = [Header ; A[:]  B[:]]
Path =  "//OUTPUT//Table//Hydraulic_Inv.csv"
println(Path)
writecsv(Path ,Data )
输出

 a,b
 1,3
 2,4
 3,5

首先,
writecsv
在v0.7中被弃用,因此最好现在不要开始使用它,因为它在v1.0中将完全消失

他们为什么要摆脱writecsv?因为对于v1.0来说,julia
Base
被剥离为绝对的基本元素。如果您需要在v1.0中使用csv文件,建议使用该软件包。例如(使用Julia v1.1.1):

请注意,在Julia v1.0中,它是:

CSV.write(somefilepath, DataFrame(x), colnames=header)
如果您不必在调用
DataFrame
时包装
x
,那就太好了。我假设在某个时候,一个包装器将被放置到位,这样就不必发生这种情况。与此同时,这只是一个小小的不便

如果您绝对坚持只使用
Base
中的函数,那么接下来您将需要使用
writedlm
。此函数没有添加标题的选项,因此您基本上需要执行当前正在执行的操作,即:

x = [1 2 ; 3 4]
header = ["a" "b"]
writedlm(somefilepath, ',', [header ; x])
注意,第二个参数确保写入文件中的分隔符是逗号


还要注意,这种方法几乎肯定会比使用
CSV
慢(最终)。这是因为
[header;x]
构造了一个类型为
Any
的临时数组,这(据我所知)意味着后续的写操作将相当低效。相比之下,
CSV
软件包工具(将)经过精确优化,以避免此类问题,理想情况下,读取/写入时间与在R中读取和写入数据帧兼容(即,非常快)

感谢您提供了如此深刻的答案,并解释了朱莉娅的未来。只是对writedlm的一个更正:

x = [1 2 ; 3 4]
header = ["a", "b"]
writedlm(somefilepath [header ; x], ",",)

抱歉,编辑太多了。最后,我对我的答案做了重大修改(并稍微修改了你的问题),使其与Julia的未来版本兼容。@Joseph.Pollacco Oops yes在复制粘贴时忘记将向量更改为行向量。好主意。在v1.1.1中,您必须使用
CSV.write(somefilepath,DataFrame(x),header=header)
@HenriqueAndrade感谢您的提醒。我已经编辑了答案。仅供参考,您应该删除此答案,因为它只是重复了您为我的答案提供的(有用的)更正。在对我的回答的评论中提到它(你也这么做了)是StackOverflow处理这种情况的正确方法。
x = [1 2 ; 3 4]
header = ["a", "b"]
writedlm(somefilepath [header ; x], ",",)