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
答
我没有基准,但试试这个:
CSV.to_enum(:foreach, filename, col_sep: "\t").drop(2).each do |row|
答
您还可以使用#read
或#readlines
像这样
CSV.readlines(filename, col_sep: "\t")[2..-1] do |row|
#readlines
是#read
的别名所以没关系,你使用,但它将CSV
拆分成一个数组Array,因此[2 ..- 1]表示在结尾使用第3行。
这和@Nakilon的答案都可能比使用计数器更好,也更清晰。
一如既往的Ruby类有很好的文档记录,阅读Docs可以比等待某人向您提供答案更有益。
您可以提供预期的CSV输入和输出吗? – 2014-09-24 16:34:29