如何在 JULIA 中使用 writecsv/writedlm 以 header 写入输出
How to write outputs with header by using writecsv/writedlm in JULIA
以下代码在 Julia 中有效,它使用 header.
写入 A
、B
的值
我想知道是否有更优雅的方式将 header 作为选项引入 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 文件,推荐的方法是使用 CSV 包。例如(使用 Julia v1.1.1):
using CSV, DataFrames
x = [1 2 ; 3 4]
header = ["a", "b"]
CSV.write(somefilepath, DataFrame(x), header=header)
请注意,在 Julia v1.0 中它是:
CSV.write(somefilepath, DataFrame(x), colnames=header)
如果您不必在对 DataFrame
的调用中包装 x
就好了。我假设在某个时候会放置一个包装器,这样就不必发生了。同时,这是一个小小的不便。
如果您绝对坚持只使用 Base
中的函数,那么以后您将需要使用 writedlm
。这个函数没有添加header的选项,所以你基本上需要做你当前正在做的事情,即:
x = [1 2 ; 3 4]
header = ["a" "b"]
writedlm(somefilepath, ',', [header ; x])
注意第二个参数确保写入文件中的分隔符是逗号。
另请注意,这种方法几乎肯定会(最终)比使用 CSV
慢。这是因为 [header ; x]
构造了一个 Any
类型的临时临时数组,这(据我所知)意味着后续的写操作将相当低效。相比之下,CSV
包工具进行了(将)精确优化以避免此类问题,并且理想情况下获得与 R 中读取和写入数据帧兼容的 read/write 次(即非常快) .
感谢您提供如此有见地的回答并解释 JULIA 的未来。只需更正 writedlm 即可工作:
x = [1 2 ; 3 4]
header = ["a", "b"]
writedlm(somefilepath [header ; x], ",",)
以下代码在 Julia 中有效,它使用 header.
写入A
、B
的值
我想知道是否有更优雅的方式将 header 作为选项引入 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 文件,推荐的方法是使用 CSV 包。例如(使用 Julia v1.1.1):
using CSV, DataFrames
x = [1 2 ; 3 4]
header = ["a", "b"]
CSV.write(somefilepath, DataFrame(x), header=header)
请注意,在 Julia v1.0 中它是:
CSV.write(somefilepath, DataFrame(x), colnames=header)
如果您不必在对 DataFrame
的调用中包装 x
就好了。我假设在某个时候会放置一个包装器,这样就不必发生了。同时,这是一个小小的不便。
如果您绝对坚持只使用 Base
中的函数,那么以后您将需要使用 writedlm
。这个函数没有添加header的选项,所以你基本上需要做你当前正在做的事情,即:
x = [1 2 ; 3 4]
header = ["a" "b"]
writedlm(somefilepath, ',', [header ; x])
注意第二个参数确保写入文件中的分隔符是逗号。
另请注意,这种方法几乎肯定会(最终)比使用 CSV
慢。这是因为 [header ; x]
构造了一个 Any
类型的临时临时数组,这(据我所知)意味着后续的写操作将相当低效。相比之下,CSV
包工具进行了(将)精确优化以避免此类问题,并且理想情况下获得与 R 中读取和写入数据帧兼容的 read/write 次(即非常快) .
感谢您提供如此有见地的回答并解释 JULIA 的未来。只需更正 writedlm 即可工作:
x = [1 2 ; 3 4]
header = ["a", "b"]
writedlm(somefilepath [header ; x], ",",)