在Ruby中读取CSV时,如何跳过标题行?

前端之家收集整理的这篇文章主要介绍了在Ruby中读取CSV时,如何跳过标题行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Ignore header line when parsing CSV file5个
Ruby的 CSV课程可以很容易地遍历每一行:
CSV.foreach(file) { |row| puts row }

但是,这总是包括标题行,所以我会得到作为输出

header1,header2
foo,bar
baz,yak

我不想要标题.现在,当我打电话给…

CSV.foreach(file,:headers => true)

我得到这个结果:

#<CSV::Row:0x10112e510
    @header_row = false,attr_reader :row = [
        [0] [
            [0] "header1",[1] "foo"
        ],[1] [
            [0] "header2",[1] "bar"
        ]
    ]
>

当然,因为文档说:

This setting causes #shift to return rows as CSV::Row objects instead of Arrays

但是,如何跳过标题行,将行作为一个简单的数组返回?我不希望返回复杂的CSV :: Row对象.

我绝对不想这样做:

first = true
CSV.foreach(file) do |row|
  if first
    puts row
    first = false
  else
    # code for other rows
  end
end

解决方法

看看 #shift从CSV类:

包装的字符串和IO的主要读取方法是从数据源中提取的一行,并将其解析并返回为字段数组(如果不使用标题行)

一个例子:

require 'csv'

# CSV FILE
# name,surname,location
# Mark,Needham,Sydney
# David,Smith,London

def parse_csv_file_for_names(path_to_csv)
  names = []  
  csv_contents = CSV.read(path_to_csv)
  csv_contents.shift
  csv_contents.each do |row|
    names << row[0]
  end
  return names
end

猜你在找的Ruby相关文章