0

残念ながら、情報を csv 形式でしかダウンロードできない API を使用しています。私が考えている唯一のオプションは、100 個までの CSV ファイルを 1 つずつダウンロードし、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
4

2 に答える 2

1

CSV ライブラリを使用すると、ヘッダーにある名前を使用して各列にアクセスできます。したがって、順序は異なりますが常に同じヘッダーがある場合は、次のようにすることができます。

CSV.foreach(csv_file, :col_sep => "," :headers => true) do |row|  
  do_whatever_you_want_with(row['your_header'])
end
于 2013-10-21T15:24:20.493 に答える
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

そして最後に、データには列名でキー付けされた列のハッシュが含まれます。

于 2013-10-21T15:41:34.453 に答える