Преобразовать массив хэшей в файл csv
Как вы преобразовываете массив хэшей в CSV файл?
Я пробовал
CSV.open("data.csv", "wb") do |csv|
@data.to_csv
end
но он пустой
Ответы
Ответ 1
Попробуй это:
CSV.open("data.csv", "wb") do |csv|
@data.each do |hash|
csv << hash.values
end
end
Если вы хотите, чтобы первая строка CSV содержала ключи хеша (вроде заголовка), просто выполните:
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
Пожалуйста, прочитайте комментарий @cgenco ниже: Он написал патч обезьяны для класса Array.
Ответ 2
Если хеши не одинаковы, вы получите данные в неправильных столбцах. Вы должны использовать values_at вместо:
CSV.open("data.csv", "wb") do |csv|
keys = @data.first.keys
csv << keys
@data.each do |hash|
csv << hash.values_at(*keys)
end
end
Ответ 3
CSV
достаточно умен, чтобы иметь дело с неоднородными хешами для вас. См. код для CSV :: Writer # & lt; & lt;
Итак, это работает и немного проще, чем приведенные выше примеры:
CSV.open("data.csv", "wb", {headers: @data.first.keys) do |csv|
@data.each do |hash|
csv << hash
end
end