【问题标题】:In Ruby, how to read data column wise from a CSV file?在 Ruby 中,如何从 CSV 文件中读取数据列?
【发布时间】:2013-01-13 22:22:28
【问题描述】:

我知道它是如何按行完成的

CSV.foreach(filename.csv) do |row|
  puts "#{row}"
end

但我完全迷失了列?

【问题讨论】:

  • 抱歉各位,刚刚解决了问题 - col_data = [] CSV.foreach(filename) {|row| col_data

标签: ruby-on-rails ruby csv


【解决方案1】:

“by_col”方法根据您的列选择为您提供输出。

test_csv:

name,surname,no1,no2,no3,date
Raja,Palit,77489,24,84,12/12/2011
Mathew,bargur,77559,25,88,01/12/2011
harin,Roy,77787,24,80,12/12/2012
Soumi,paul,77251,24,88,11/11/2012

代码:

CSV.parse(File.open('test_csv'), headers: true).by_col['surname']

输出:

['Palit','bargur','Roy','paul']

【讨论】:

    【解决方案2】:

    这是解决方案,伙计们:

    CSV.foreach(filename).map { |row| row[0] }
    

    很抱歉这么晚才以正确的格式发布。

    【讨论】:

    【解决方案3】:

    无聊,所以决定在这里制作一个替代解决方案。仅在第一行具有最大列数时才有效(此处)

    columns = {}
    rows.first.each_with_index do |col, i|
      columns[i] = []
    end
    rows.each do |row|
      row.each_with_index do |cell, i|
        columns[i] = columns[i] + [cell]
      end
    end
    

    现在您应该能够通过索引访问每一列

    【讨论】:

      【解决方案4】:

      test.csv:

      name,surname,no1,no2,no3,date
      Raja,Palit,77489,24,84,12/12/2011
      Mathew,bargur,77559,25,88,01/12/2011
      harin,Roy,77787,24,80,12/12/2012
      Soumi,paul,77251,24,88,11/11/2012
      

      按列访问:

      require 'csv'
      csv = CSV.read('test.csv', :headers=>true)
      p csv['name'] #=>["Raja", "Mathew", "harin", "Soumi"]
      
      #or even:
      t = CSV.table('test.csv')
      p t[:no1] #=> [77489, 77559, 77787, 77251]
      

      请注意,在最后一种情况下,列是通过其符号名称访问的,并且字符串会尽可能转换为数字。

      【讨论】:

        【解决方案5】:

        转置您的 CSV 文件。通过这样做,您的行转换为列,反之亦然。下面是一个简单的转置示例。

           irb(main):001:0> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]].transpose
            => [["1", "4", "7"], ["2", "5", "8"], ["3", "6", "9"]]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-01
          • 2020-08-28
          • 1970-01-01
          • 1970-01-01
          • 2014-01-07
          • 2019-09-17
          相关资源
          最近更新 更多