【问题标题】:Ignore header line when parsing CSV file解析 CSV 文件时忽略标题行
【发布时间】:2011-05-09 11:26:33
【问题描述】:

在进行 CSV 解析时,如何在 ruby​​ on rails 中忽略 CSV 文件的标题行!任何想法

【问题讨论】:

  • 您的问题到底是什么?要跳过标题行,只需从第 1 行而不是 0 开始
  • 顺便说一句,不要忘记您需要标头来识别 CVS 的内容。否则你只是有数据而不知道到底是什么

标签: ruby-on-rails-3 csv


【解决方案1】:

如果您使用的是 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_contentCSV.parse your_csv_content, headers: true 返回不同的对象。第一个是数组数组,第二个是CSV::Row 对象数组stackoverflow.com/a/37856698/473040
【解决方案2】:
csv = CSV.read("file")

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

csv # <-- the results that you want

【讨论】:

    【解决方案3】:

    我已经找到了上述问题的解决方案。这是我在 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 文件中避免这种情况。
    【解决方案4】:

    我发现更简单的方法是这样做:

    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
    

    【讨论】:

      【解决方案5】:

      这是对我有用的最简单的方法。您可以读取 CSV 文件并使用 headers: true 忽略它的第一行,即标题或字段名称:

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

      您可以使用row 为所欲为。别忘了headers: true

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-23
        • 2019-12-01
        • 2019-09-27
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        相关资源
        最近更新 更多