我似乎无法让这个工作。我想从不同的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宝石)。
谁能告诉我如何使这项工作?
答案 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