我有一个文件,其中第一行是无用的行,第二行是标题。问题是,当我循环遍历文件时,它会计算这些行。有没有办法使用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
答案 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比等待别人给你答案更有益。