FasterCSV:读取远程CSV文件

时间:2009-01-12 14:49:02

标签: ruby-on-rails url csv fastercsv

我似乎无法让这个工作。我想从不同的Web服务器中提取CSV文件以读取我的应用程序。这就是我想称之为:

url = 'http://www.testing.com/test.csv'
records = FasterCSV.read(url, :headers => true, :header_converters => :symbol)

但这不起作用。我尝试了谷歌搜索,我想出的就是这段摘录:Practical Ruby Gems

所以,我尝试按如下方式修改它:

require 'open-uri'
url = 'http://www.testing.com/test.csv'
csv_url = open(url)
records = FasterCSV.read(csv_url, :headers => true, :header_converters => :symbol)

...我收到can't convert Tempfile into String错误(来自FasterCSV宝石)。

谁能告诉我如何使这项工作?

5 个答案:

答案 0 :(得分:5)

require 'open-uri'
url = 'http://www.testing.com/test.csv'
open(url) do |f|
  f.each_line do |line|
    FasterCSV.parse(line) do |row|
      # Your code here
    end
  end
end

http://www.ruby-doc.org/core/classes/OpenURI.html http://fastercsv.rubyforge.org/

答案 1 :(得分:1)

例如,我会使用Net::HTTP检索文件并将其提供给FasterCSV

摘自ri Net::HTTP

 require 'net/http'
 require 'uri'

 url = URI.parse('http://www.example.com/index.html')
 res = Net::HTTP.start(url.host, url.port) {|http|
   http.get('/index.html')
 }
 puts res.body

答案 2 :(得分:1)

你刚才有一个小错字。您应该使用FasterCSV.parse代替FasterCSV.read

data = open('http://www.testing.com/test.csv')
records = FasterCSV.parse(data)

答案 3 :(得分:0)

我会用rio下载它 - 就像:

一样简单
require 'rio'
require 'fastercsv'

array_of_arrays = FasterCSV.parse(rio('http://www.example.com/index.html').read)

答案 4 :(得分:0)

我使用Paperclip上传CSV文件并将其保存到Cloudfiles,然后使用Delayed_job启动文件处理。

这对我有用:

require 'open-uri'
url = 'http://www.testing.com/test.csv'
open(url) do |file|
  FasterCSV.parse(file.read) do |row|
    # Your code here
  end
end