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

时间:2014-09-24 16:32:45

标签: ruby csv

我有一个文件,其中第一行是无用的行,第二行是标题。问题是,当我循环遍历文件时,它会计算这些行。有没有办法使用foreach选项跳过2行?我知道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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您也可以使用#read#readlines这样

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

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

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

与往常一样,Ruby课程都有详细记录,阅读Docs比等待别人给你答案更有益。