convert array of hashes to csv file

后端 未结 3 759
名媛妹妹
名媛妹妹 2021-02-02 11:36

How do you convert an array of hashes to a .csv file?

I have tried

    CSV.open(\"data.csv\", \"wb\") do |csv|
      @data.to_csv
    end
相关标签:
3条回答
  • 2021-02-02 11:53

    If the hashes aren't uniform then you will end up with data in the wrong columns. You should use values_at instead:

    CSV.open("data.csv", "wb") do |csv|
      keys = @data.first.keys
      csv << keys
      @data.each do |hash|
        csv << hash.values_at(*keys)
      end
    end
    
    0 讨论(0)
  • 2021-02-02 12:00

    Try this:

    CSV.open("data.csv", "wb") do |csv|
      @data.each do |hash|
        csv << hash.values
      end
    end
    

    If you want the first line of the CSV to contain the keys of the hash (kind of like a header), simply do:

    CSV.open("data.csv", "wb") do |csv|
      csv << @data.first.keys # adds the attributes name on the first line
      @data.each do |hash|
        csv << hash.values
      end
    end
    

    Please read the comment of @cgenco below: He wrote a monkey patch for the Array class.

    0 讨论(0)
  • 2021-02-02 12:08

    CSV is smart enough to deal with the non-uniform hashes for you. See the code for CSV::Writer#<<

    So, this works, and is a bit simpler than the above examples:

    CSV.open("data.csv", "wb", {headers: @data.first.keys} ) do |csv|
      @data.each do |hash|
        csv << hash
      end
    end
    
    0 讨论(0)
提交回复
热议问题