我有这个 2D 数组:
arr = [[1,2],[3,4]]
我通常做:
CSV.open(file) do |csv|
arr.each do |row|
csv << row
end
end
除了逐行添加之外,还有更简单或直接的方法吗?
假设你的数组只是数字(没有可能包含逗号的字符串),那么:
File.open(file,'w'){ |f| f << arr.map{ |row| row.join(',') }.join('n') }
一个巨大的字符串被传送到磁盘上,不涉及CSV库。
或者,使用 CSV 库正确转义每一行:
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)
使用
csv 库并需要更改默认分隔符时,将上述答案扩展@Phrogz:
File.open(file,'w'){ |f| f << arr.map{|x| x.to_csv(col_sep: '|')}.join }