加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:02:59 所属栏目:百科 来源:网络整理
导读:参见英文答案 Ignore header line when parsing CSV file5个 Ruby的 CSV 课程可以很容易地遍历每一行: CSV.foreach(file) { |row| puts row } 但是,这总是包括标题行,所以我会得到作为输出: header1,header2foo,barbaz,yak 我不想要标题.现在,当我打电话给
参见英文答案 > 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读