我使用Ruby打开CSV:
CSV.foreach(file_name, "r+") do |row|
next if row[0] == 'id'
update_row! row
end
我并不关心标题行。
我不喜欢内部循环next if row[1] == 'id'
。有没有告诉CSV跳过标题行并只是遍历带有数据的行?
我假设提供的CSV总是有一个标题行。
答案 0 :(得分:3)
有几种方法可以解决这个问题。最简单的方法是将{headers: true}
选项传递给循环:
CSV.foreach(file_name, headers: true) do |row|
update_row! row
end
注意没有指定模式 - 这是因为根据文档,CSV::foreach只接受文件和选项哈希作为其参数(而不是CSV::open,其中 允许指定模式。
或者,你可以在迭代它之前将数据读入数组(而不是使用foreach)和shift
数组:
my_csv= CSV.read(filename)
my_csv.shift
my_csv.each do |row|
update_row! row
end
答案 1 :(得分:1)
答案 2 :(得分:0)
在逐行阅读文件时,一件简单的事情就是:
CSV.foreach(file_name, "r+") do |row|
next if $. == 1
update_row! row
end
$.
是Ruby中的一个全局变量,它包含正在读取的文件的行号。