我正在使用API,遗憾的是只允许我以csv格式下载信息。我想到的唯一选择是逐个下载~100个CSV文件,将csv文件的每一列存储到一个数组中,然后在完成后删除该CSV文件。每个文件都包含相同的列标题,但它们的顺序不同:
#CSV File 1
column1 | column3 | column2
#CSV File 2
column1 | column2 | column3
如何编写脚本以将每列添加到适当的数组(column1
,column2
,column3
)?我目前正在人工创建这样的列,但这完全基于列号,而不是名称:
column1 = []
column2 = []
column3 = []
CSV.foreach(csv_file, :col_sep => "," :headers => false) do |column|
column1 << column[0]
column2 << column[1]
column3 << column[2]
end
答案 0 :(得分:1)
使用CSV库,您可以使用标题中的名称访问每列。因此,如果您总是使用相同的标题,但顺序不同,则可以这样做:
CSV.foreach(csv_file, :col_sep => "," :headers => true) do |row|
do_whatever_you_want_with(row['your_header'])
end
答案 1 :(得分:1)
我认为最简单的方法是构建一个数组哈希,如:
require 'csv'
data = Hash.new
array_of_csv_filenames.each do |file|
csv = CSV.read(file, :headers => true)
csv.by_col!
csv.each do |name, values|
data[name] = Array.new unless data[name]
data[name].concat values
end
end
然后,最后,数据将包含列的哈希值,按列名称键入。