使用FasterCSV解析远程文件

时间:2012-08-04 02:32:09

标签: ruby parsing csv import fastercsv

我正在尝试解析远程CSV文件的前5行。但是,当我这样做时,它会引发Errno::ENOENT异常,并说:

No such file or directory - [file contents]([文件内容]是CSV内容的转储

这是我的代码:

  def preview
    @csv = []
    open('http://example.com/spreadsheet.csv') do |file|
      CSV.foreach(file.read, :headers => true) do |row|
        n += 1
        @csv << row
        if n == 5
          return @csv
        end
      end
    end
  end

上面的代码是根据我在其他人看到的Stack Overflow上使用的内容构建的,但我无法让它工作。

如果我从文件中删除read方法,则会引发TypeError异常,并说:

can't convert StringIO into String

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:0)

Foreach需要一个文件名。试试parse.each

答案 1 :(得分:0)

您可以手动将每行传递给CSV进行解析:

require 'open-uri'
require 'csv'

def preview(file_url)
    @csv = []
    open(file_url).each_with_index do |line, i|
        next if i == 0 #Ignore headers
        @csv << CSV.parse(line)
        if i == 5
            return @csv
        end
    end
end

puts preview('http://www.ferc.gov/docs-filing/eqr/soft-tools/sample-csv/contract.txt')