【发布时间】:2011-05-09 11:26:33
【问题描述】:
在进行 CSV 解析时,如何在 ruby on rails 中忽略 CSV 文件的标题行!任何想法
【问题讨论】:
-
您的问题到底是什么?要跳过标题行,只需从第 1 行而不是 0 开始
-
顺便说一句,不要忘记您需要标头来识别 CVS 的内容。否则你只是有数据而不知道到底是什么
标签: ruby-on-rails-3 csv
在进行 CSV 解析时,如何在 ruby on rails 中忽略 CSV 文件的标题行!任何想法
【问题讨论】:
标签: ruby-on-rails-3 csv
如果您使用的是 ruby 1.8.X 和 FasterCSV,它有一个“headers”选项:
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})
【讨论】:
CSV.parse your_csv_content 和CSV.parse your_csv_content, headers: true 返回不同的对象。第一个是数组数组,第二个是CSV::Row 对象数组stackoverflow.com/a/37856698/473040
csv = CSV.read("file")
csv.shift # <-- kick out the first line
csv # <-- the results that you want
【讨论】:
我已经找到了上述问题的解决方案。这是我在 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
【讨论】:
File.read 把整件事都塞进记忆里。我会在大型 CSV 文件中避免这种情况。
我发现更简单的方法是这样做:
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
【讨论】:
这是对我有用的最简单的方法。您可以读取 CSV 文件并使用 headers: true 忽略它的第一行,即标题或字段名称:
CSV.foreach(File.join(File.dirname(__FILE__), filepath), headers: true) do |row|
puts row.inspect
end
您可以使用row 为所欲为。别忘了headers: true
【讨论】: