我确定对此有一个非常基本的解决方案,但无法从文档中解决。基本上,我正在做一个循环,并在每个循环中进行API调用,然后尝试将数据写入csv。但是,每个循环都会覆盖csv的第一行,我希望每个循环将数据附加到csv的下一行。
while counter >= 1
high_temp = method_that_gets_high_temperature
counter = counter - 1
CSV.open("summer_temp.csv", "w") do |row|
row << [month, day, year, high_temp]
end
end
答案 0 :(得分:0)
这是因为您向CSV.open提供了“ w”(写入和截断)。如果要追加,则应改为传递“ a”。参见ruby-doc.org/core-2.0.0/IO.html#method-c-new-label-IO+Open+Mode
答案 1 :(得分:0)
让我们
def api
@api ||= [['woof', 'meow'], ['devoted', 'aloof'], ['1 life', '9 lives']].cycle
@api.next
end
模拟您的API:
api #=> ["woof", "meow"]
api #=> ["devoted", "aloof"]
api #=> ["1 life", "9 lives"]
api #=> ["woof", "meow"]
...
无限地。参见Array#cycle。在忘记之前,请重设@api
:@api = nil
。
然后我们可以编写以下内容。
require 'csv'
def doit(fname, headers, n)
CSV.open(fname, "w") do |csv|
csv << headers
n.times { csv << api }
end
end
尝试一下:
doit('test.csv', ['dogs', 'cats'], 2)
puts File.read('test.csv')
dogs,cats
woof,meow
devoted,aloof