数据被覆盖,而不是附加到CSV

Tat*_*ank 3 csv rake ruby-on-rails

我正在使用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
Run Code Online (Sandbox Code Playgroud)

Tho*_*oll 5

对文件进行操作时,您的模式是错误的,应该为a+。请参阅文档中的详细信息:http : //ruby-doc.org/core-2.2.4/IO.html#method-c-new

另外,您可能只想一次打开该文件,而不是每行都打开一次。