簡體   English   中英

如何將列添加到CSV文件?

[英]How can I add a column to a CSV file?

我有以下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文件包含標題時,您可以訪問和操作列:

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類的方法是讀取文件,然后用額外的列重寫數據。 讓我們生成您的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.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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM