我正在使用 rake 任务和 csv 模块来遍历一个 csv,提取并更改我需要的数据,然后将每个新数据行附加到第二个 csv。但是,每一行似乎都在覆盖/替换新 csv 中的前一行,而不是将其作为新行附加到它之后。我查看了文档并进行了谷歌搜索,但找不到任何以不同方式将行附加到 csv 的示例。
require 'csv'
namespace :replace do
desc "replace variant id with variant sku"
task :sku => :environment do
file="db/master-list-3-28.csv"
CSV.foreach(file) do |row|
msku, namespace, key, valueType, value = row
valueArray = value.split('|')
newValueString = ""
valueArray.each_with_index do |v, index|
recArray = v.split('*')
handle = recArray[0]
vid = recArray[1]
newValueString << handle
newValueString << "*"
variant = ShopifyAPI::Variant.find(vid)
newValueString << variant.sku
end
#end of value save the newvaluestring to new csv
newFile = Rails.root.join('lib/assets', 'newFile.csv')
CSV.open(newFile, "wb") do |csv|
csv << [newValueString]
end
end
end
end
最佳答案
你打开文件的方式不对,应该是a+
。请参阅文档中的详细信息:http://ruby-doc.org/core-2.2.4/IO.html#method-c-new
此外,您可能希望只打开该文件一次,而不是每一行。
关于ruby-on-rails - 数据被覆盖而不是附加到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287807/