在Ruby中返回CSV标头

时间:2013-10-11 21:29:08

标签: ruby csv

如何设置我的文件以不拉入我的csv文件中的标题?我试过这个:

CSV.foreach(email_response_file, :col_sep => "\t", :return_headers => false) do |column|
  ....
end

但是,无论我将:return_headers设置为true还是false,我仍然会引入标题。我怎么能摆脱他们?我认为我的问题是我正在使用的.foreach方法。

3 个答案:

答案 0 :(得分:3)

:return_headers仅在:headerstrue时才有效,但它不会按照您的想法运作。

如果您的CSV数据包含标题行,只需设置headers: true,第一行不会作为数据行返回。相反,它被解析并允许您通过其标题访问字段(如散列):

require 'csv'

data=<<-eos
id,name
1,foo
2,bar
eos

CSV.parse(data, headers: true) do |row|
  puts "ID: " + row["id"]
  puts "Name: " + row["name"]
  puts "1st col: " + row[0]
  puts "2nd col: " + row[1]
  puts "---"
end

<强>输出:

ID: 1
Name: foo
1st col: 1
2nd col: foo
---
ID: 2
Name: bar
1st col: 2
2nd col: bar
---

答案 1 :(得分:0)

我想你想要headers: false

如果失败了,你总是可以跳过第一行(foreach是否返回迭代器?)

CSV.foreach(file).each_with_index do |row, idx|


end

此外,它只是语义,但foreach返回一行,而不是列

答案 2 :(得分:0)

您也可以使用CSV.table将.csv文件读入表格。

 datatable = CSV.table("file path")

 puts datatable.headers()