如何将2D数组直接转储到CSV文件中?

时间:2012-06-05 19:53:46

标签: ruby csv

我有这个2D数组:

arr = [[1,2],[3,4]]

我通常会这样做:

CSV.open(file) do |csv| 
  arr.each do |row| 
    csv << row
  end
end

除了逐行添加之外,还有更简单或直接的方法吗?

2 个答案:

答案 0 :(得分:10)

假设您的数组只是数字(没有可能包含逗号的字符串),那么:

File.open(file,'w'){ |f| f << arr.map{ |row| row.join(',') }.join('\n') }

一个巨大的字符串被抨击磁盘,没有涉及CSV库。

或者,使用CSV库correctly escape each row

require 'csv'
# #to_csv automatically appends '\n', so we don't need it in #join
File.open(file,'w'){ |f| f << arr.map(&:to_csv).join } 

如果你经常这样做并且代码困扰你,你可以将它打包成:

class CSV
  def self.dump_array(array,path,mode="rb",opts={})
    open(path,mode,opts){ |csv| array.each{ |row| csv << row } }
  end
end
CSV.dump_array(arr,file)

答案 1 :(得分:0)

通过@Phrogz扩展上面的答案,同时使用csv库并要求更改默认分隔符:

File.open(file,'w'){ |f| f << arr.map{|x| x.to_csv(col_sep: '|')}.join }