如何使用Ruby 2.2.2将列附加到现有CSV

如何使用Ruby 2.2.2将列附加到现有CSV,ruby,csv,Ruby,Csv,编辑:我不需要使用相同的文件。可以创建一个新文件。我需要的是结果包含与原始列和新列相同的列和行,但顺序相同。 我一直试图用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]}&s

编辑:我不需要使用相同的文件。可以创建一个新文件。我需要的是结果包含与原始列和新列相同的列和行,但顺序相同。

我一直试图用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.open('test.csv', 'r+') do |row|
  row << ['existing_header1','existing_header2','new_header']
end
CSV.open('test.CSV','r+')do|行|

行<代码>行
是从CSV文件读取的内部表示形式。对它的修改不会影响原始CSV源。您需要打开另一个CSV文件进行写入,并在修改后将行写入该文件。这就是你所缺少的吗?我想会有办法修改当前的文档。在文档中,情况似乎是这样,但我无法确定……就地编辑文件似乎已经包含在其中,并且有两个很好的答案。可能重复,但两个答案都涉及到编辑文件而不是CSV。我使用的是CSV类,这不是不同的方法吗?
CSV.open('test.csv', 'r+') do |row|
  row << ['existing_header1','existing_header2','new_header']
end