Ruby 如何将列添加到CSV文件?

Ruby 如何将列添加到CSV文件?,ruby,csv,Ruby,Csv,我有以下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 我能想

我有以下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

我能想到的使用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:

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文件具有标题时,您可以访问和操作列:

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
需要“csv”
table=CSV.read(“test.CSV”,{headers:true,col_sep:”,“})
#一次性更改第3列(或添加一个新的表:[“header_4”]=['summin 3','summin 6']):
表[“页眉_3”]=['summin 3','summin 6']
#逐行添加另一个列:
表1.每行|
行[“标题4”]=兰特(9)
结束
#写入文件
CSV.open(“test2.CSV”,“w”)do | f|
f
需要“csv”
列添加=[“新值1”,“新值1”]
CSV.open(/Folder/new_file_name.CSV,“wb”)do|CSV|

csv如何添加多个列?对于新的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
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