【问题标题】:How to dump a 2D array directly into a CSV file?如何将二维数组直接转储到 CSV 文件中?
【发布时间】:2012-06-09 20:45:31
【问题描述】:

我有这个二维数组:

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

我通常这样做:

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

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

【问题讨论】:

  • 你所拥有的对程序员来说已经非常容易了。您是否(过早地)担心一次添加一行的性能?
  • @Phrogz 不,我不担心性能。我想让生活更轻松,但不确定是否已经有东西可以使用,或者我必须自己做。
  • 和 CSV.read 方法一样,它可以读取 csv 文件并解析为二维数组,但是为什么没有相反的呢?
  • 在旧版本的 Ruby 中曾经有 CSV.dump...现在已经不存在了

标签: ruby csv


【解决方案1】:

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

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)

【讨论】:

  • 那么有没有预定义的方法可以做到这一点?然后我会做一个猴子补丁......
  • @texasbruce 您对文档的阅读和我的一样好。我没有看到;你呢?
  • 顶级版本对我不起作用,将一堆文字“\n”字符串嵌入到文件中。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2013-05-09
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多