我正在尝试将新列追加到现有csv文件的每一行。以下代码执行我想要的:
csv_info = CSV.read("foo.csv")
csv_info.each do |info|
info << new_object
end
使用时给我以下记忆pry
:
[[uuid0, account0, url0, new_object],
[uuid1, account1, url1, new_object]]
这不会写入文件,因为它是CSV.read
而不是CSV.open("foo.csv","w")
。当我尝试用csv_info
对象覆盖文件时:
csv_info = CSV.read("foo.csv")
csv_info.each do |info|
info << new_object
end
CSV.open("foo.csv", "w") do |old_csv|
old_csv << csv_info
end
文件最终如下所示:
[["[\"<uuid0>\", \"<account0>\", \"<url0>\", \"<new_object>\"]",
"[\"<uuid1>\", \"<account1>\", \"<url1>\", \"<new_object>\"]"]]
如何在不影响csv格式的情况下追加内容?
CSV#<<
期望单行:
CSV.generate { |csv| csv << [1, 2, 3] }
#=> "1,2,3\n"
CSV.generate { |csv| csv << [1, 2, 3] << [4, 5, 6] }
#=> "1,2,3\n4,5,6\n"
但您传递的是二维数组(无法按预期运行):
CSV.generate { |csv| csv << [[1, 2, 3], [4, 5, 6]] }
#=> "\"[1, 2, 3]\",\"[4, 5, 6]\"\n"
因此,而不是:
old_csv << csv_info
您需要类似以下内容的东西:
csv_info.each do |info|
old_csv << info
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句