2011-05-09 116 views
11

在進行CSV解析時,如何在Ruby on Rails中忽略CSV文件的標題行!任何想法解析CSV文件時忽略標題行

+1

你的問題到底是什麼?要跳過標題行,只需從第1行開始,而不是從0開始 – sra 2011-05-09 11:28:41

+1

,不要忘記您需要標題來標識CVS的內容。否則,只需要知道 – sra 2011-05-09 11:31:50

回答

1

我已經找到了上述問題的解決方案。這是我在Ruby 1.9.X中完成的方式。

csv_contents = CSV.parse(File.read(file)) 
csv_contents.slice!(0) 
csv="" 
csv_contents.each do |content| 
    csv<<CSV.generate_line(content) 
end 
26

如果你使用Ruby 1.8.x的和FasterCSV,它具有「」選項:

csv = FasterCSV.parse(your_csv_file, {:headers => true}) #or false if you do want to read them 

如果你使用Ruby 1.9.x的,默認的庫基本上是FasterCSV,所以你可以做到以下幾點:

csv = CSV.parse(your_csv_file, {headers: true}) 
+2

注意爲「CSV.parse your_csv_content」和「CSV.parse your_csv_content,headers:true」返回不同對象的數據。首先是數組數組,第二個是'CSV :: Row'對象數組http://stackoverflow.com/a/37856698/473040 – equivalent8 2016-06-16 10:37:59

3

一個很酷的方式忽略標題就是讀它作爲一個數組,而忽略第一行:

data = CSV.read("dataset.csv")[1 .. -1] 
# => [["first_row", "with data"], 
     ["second_row", "and more data"], 
     ... 
     ["last_row", "finally"]] 

:headers => false方法的問題是,CSV不會嘗試讀取第一行作爲標題,但會將其視爲數據的一部分。所以,基本上,你有一個無用的第一行。

5
csv = CSV.read("file") 

csv.shift # <-- kick out the first line 

csv # <-- the results that you want 
0

我已經找到了更簡單的方法是這樣:

file = CSV.open('./tmp/sample_file.csv', { :headers => true }) 
# <#CSV io_type:File io_path:"./tmp/sample_file.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"" headers:true> 

file.each do |row| 
puts row 
end 
0

這是最簡單的一個爲我工作。你可以閱讀一個CSV文件,而忽略它的第一線,是使用headers: true頁眉或字段名稱:

CSV.foreach(File.join(File.dirname(__FILE__), filepath), headers: true) do |row| 
    puts row.inspect 
end 

你可以做你想要row什麼都。別忘了headers: true