【问题标题】:Ruby CSV: How to skip the first two lines of file?Ruby CSV:如何跳过文件的前两行?
【发布时间】:2014-09-24 16:32:44
【问题描述】:

我有一个文件,其中第一行是无用的行,第二行是标题。问题是当我遍历文件时,它会计算那些行。有没有办法将foreach 与跳过两行的选项一起使用?我知道 CSV 上有一个 read 方法,但它会将数据加载到 RAM 中,如果文件太大,我认为它不会很好地扩展。

但是,如果没有其他选择,我会考虑。这是我目前所拥有的:

CSV.foreach(filename, col_sep: "\t") do |row|
  until listings.size == limit
    listing_class = 'Sale'
    address = row[7]
    unit = row[8]
    price = row[2]
    url = row[0]
    listings << {listing_class: listing_class, address: address, unit: unit, url: url, price: price}
  end
end

【问题讨论】:

  • 你能给出预期的 CSV 输入和输出吗?

标签: ruby csv


【解决方案1】:

我没有进行基准测试,但试试这个:

CSV.to_enum(:foreach, filename, col_sep: "\t").drop(2).each do |row|

【讨论】:

    【解决方案2】:

    使用计数器变量,将其初始化为 0,并在每一行递增,因此如果小于 2,则可以跳到下一行。

    【讨论】:

    • 是的,我在其他地方也看到了这个解决方案。我想它会做的
    【解决方案3】:

    你也可以像这样使用#read#readlines

    CSV.readlines(filename, col_sep: "\t")[2..-1] do |row|
    

    #readlines#read 的别名,因此使用哪个并不重要,但它将CSV 拆分为一个数组数组,因此[2..-1] 意味着使用第3 行到最后。

    这和@Nakilon 的答案都可能比使用柜台更好,而且绝对更干净。

    与往常一样,Ruby 类都有很好的文档记录,阅读Docs 比仅仅等待别人给你答案要有益得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2014-07-15
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多