编辑:我不需要使用相同的文件,可以创建一个新文件。我需要的是结果包含与原始文件相同的行和列以及新的列,但顺序相同。
我一直在尝试使用Ruby将列追加到现有的CSV文件中,但我遇到了一个我不理解的错误。这是我的代码:
CSV.foreach("test.csv", "a+") do | row |
c = Curl::Easy.perform("http://maps.googleapis.com/maps/api/geocode/json?latlng=#{row[1]},#{row[0]}&sensor=false")
result = JSON.parse(c.body_str)
if result['status'] != 'OK'
sleep(5)
else
row << result['results'][0]['formatted_address']
result['results'][0]['address_components'].each do | w |
row << w['short_name']
end
end
结束
在CSV.foreach...
这部分,我尝试过CSV.foreach('file.csv', 'a+')
、CSV.foreach('file.csv', 'wb')
和CSV.foreach('file.csv', 'a')
,但似乎都不起作用。
后来我想到也许应该使用open
代替:
file = CSV.open('test.csv', 'wb')
file.each do | csv |
c = Curl::Easy.perform("http://maps.googleapis.com/maps/api/geocode/json?latlng=#{row[1]},#{row[0]}&sensor=false")
result = JSON.parse(c.body_str)
if result['status'] != 'OK'
sleep(5)
else
row << result['results'][0]['formatted_address']
result['results'][0]['address_components'].each do | w |
row << w['short_name']
end
end
end
但是这也行不通。我错过了什么吗?谢谢!
row
是从CSV文件中读取的内部表示。对其进行修改不会影响原始的CSV源文件。您需要打开另一个CSV文件进行写入,并在修改后将行写入该文件。这是您所缺少的吗? - Arie Xiao