【问题标题】:How can I add a column to a CSV file?如何将列添加到 CSV 文件?
【发布时间】:2015-11-29 12:59:04
【问题描述】:

我有以下 CSV 文件:

header 1, header 2, header 3
summin 1, summin 2, summin 3
summin 4, summin 5, summin 6

我将如何使用 CSV 类附加一列数据,因此结果如下所示:

header 1, header 2, header 3, header 4
summin 1, summin 2, summin 3, new value 1
summin 4, summin 5, summin 6, new value 2

【问题讨论】:

    标签: ruby csv


    【解决方案1】:
    require "csv"
    
    column_to_add=["new value 1","new value 1"] 
    
    CSV.open(/Folder/new_file_name.csv, "wb") do |csv|
      csv << ["header 1", "header 2", "header 3", "header 4"]
        CSV.foreach(/Folder/OriginalFile.csv, headers: true) do |row,index|
            csv << [row[1], row[2] , row[3] , column_to_add[index]]
        end
    end
    

    【讨论】:

    • 这看起来像是对先前答案的改写。这如何改进这些答案?
    • 这实际上对我很有帮助。谢谢。
    【解决方案2】:

    当 CSV 文件有标题时,您可以访问和操作列:

    require "csv"
    table = CSV.read("test.csv", {headers: true, col_sep: ", "})
    
    # change col 3 in one go, (or add a new one: table["header_4"] = ['summin 3','summin 6'] ):
    table["header_3"] = ['summin 3','summin 6']
    
    # Add another col, row by row:
    table.each do |row|
      row["header_4"] = rand(9)
    end
    
    # write to file
    CSV.open("test2.csv", "w") do |f|
      f << table.headers
      table.each{|row| f << row}
    end
    

    【讨论】:

      【解决方案3】:

      我能想到的唯一使用 CSV 类的方法是读取文件,然后用额外的列重写数据。让我们生成您的 CSV 数据:

      csv = CSV.generate do |csv|
          csv << ['header 1', 'header 2', 'header 3']
          csv << ['summin 1', 'summin 2', 'summin 3']
          csv << ['summin 4', 'summin 5', 'summin 6']
      end
      

      我们可以使用CSV.parse 对其进行迭代(尽管如果您正在从文件中读取,您可能希望使用CSV.foreach),并在块中创建新的 CSV 数据:

      # Values for new column (including header)
      new_values = ['header 4', 'new value 1', 'new value 2']
      
      i = 0
      CSV.parse(csv) do |row| 
      
          new_csv = CSV.generate do |new_csv| 
              new_csv << row + [new_values[i]]
              i += 1
          end 
          puts new_csv
      end 
      

      上面的结果输出是您的最终 CSV:

      header 1,header 2,header 3,header 4
      summin 1,summin 2,summin 3,new value 1
      summin 4,summin 5,summin 6,new value 2
      

      请注意,在写入文件时,您需要使用CSV.open,而不是CSV.generate

      【讨论】:

      • 如何添加多列?对于 new_csv
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多