【发布时间】:2019-03-03 04:34:29
【问题描述】:
我想在 CSV 响应中添加新列并更新现有值。我怎样才能更简单更好地进行以下转换?
输入
id,name,country
1,John,US
2,Jack,UK
3,Sam,UK
我正在使用以下方法来解析 csv 字符串并添加新列
# Parse original CSV
rows = CSV.parse(csv_string, headers: true).collect do |row|
hash = row.to_hash
# Merge additional data as a hash.
hash.merge('email' => 'sample@gmail.com')
end
# Extract column names from first row of data
column_names = rows.first.keys
# Generate CSV after transformation of csv
csv_response = CSV.generate do |csv|
csv << column_names
rows.each do |row|
# Extract values for row of data
csv << row.values_at(*column_names)
end
end
我正在使用以下方法来解析 csv 并更新现有值
name_hash = {"John" => "Johnny", "Jack" => "Jackie"}
解析原始 CSV
rows = CSV.parse(csv_string, headers: true).collect do |row|
hash = row.to_hash
hash['name'] = name_hash[hash['name']] if name_hash[hash['name']] != nil
hash
end
# Extract column names from first row of data
column_names = rows.first.keys
# Generate CSV after transformation of csv
csv_response = CSV.generate do |csv|
csv << column_names
rows.each do |row|
# Extract values for row of data
csv << row.values_at(*column_names)
end
end
【问题讨论】:
标签: ruby-on-rails csv parsing