使用标题为 header 的 DelimitedFiles

using DelimitedFiles with title of the header

导入.csv文件时,有没有办法从header的标题中读取数据? 考虑以下 .csv 文件:

我的意思是,除了 start_node = round.(Int64, data[:,1]) 之外,还有另一种说法是“start_node”是 .csv 文件中的 header 是 "start node i"

# Importing packages
using  DelimitedFiles



# Data Preparation
network_data_file = "network.csv"
network_data = readdlm(network_data_file, ',', header=true)
data = network_data[1]
header = network_data[2]

start_node = round.(Int64, data[:,1])
end_node = round.(Int64, data[:,2])

最自然的方法是将 CSVDataFrames 包一起使用。

考虑文件:

 open("f.txt", "w") do f
       println(f,"""start;end;c
              1;2;3
              4;5;6
              """)
       end

你可以这样做:

julia> df = CSV.File("f.txt") |> DataFrame
2×3 DataFrame
 Row │ start  end    c
     │ Int64  Int64  Int64
─────┼─────────────────────
   1 │     1      2      3
   2 │     4      5      6

现在:

julia> df.start
2-element Vector{Int64}:
 1
 4

如果你想坚持使用 DelimitedFiles,你可以这样做:

julia> res = readdlm("f.txt",';'; header=true);


julia> DataFrame(res[1], vec(res[2]))
2×3 DataFrame
 Row │ start    end      c
     │ Float64  Float64  Float64
─────┼───────────────────────────
   1 │     1.0      2.0      3.0
   2 │     4.0      5.0      6.0

完全没有任何包裹:

julia> res[1][:,findfirst(==("start"), vec(res[2]))]
2-element Vector{Float64}:
 1.0
 4.0

最后,值得注意的是,如果您希望 readdlm 产生 Ints 而不是 Float64s,您可以将数据读取为 readdlm("f.txt",';',Int,'\n'; header=true)