Ruby CSV:如何跳过文件的前两行?

问题描述:

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

但是,如果没有其他选择,我会考虑它。这是我到目前为止有:

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 
+0

您可以提供预期的CSV输入和输出吗? – 2014-09-24 16:34:29

我没有基准,但试试这个:

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

使用计数器变种,它初始化为0,并在每行增加,所以如果它小于2,那么你可以跳到下一行。

+0

我也在别处看到过这个解决方案。我想它会做 – Edmund 2014-09-24 16:38:11

您还可以使用#read#readlines像这样

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

#readlines#read的别名所以没关系,你使用,但它将CSV拆分成一个数组Array,因此[2 ..- 1]表示在结尾使用第3行。

这和@Nakilon的答案都可能比使用计数器更好,也更清晰。

一如既往的Ruby类有很好的文档记录,阅读Docs可以比等待某人向您提供答案更有益。