0

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

No such file or directory - [file contents](其中 [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

有什么我想念的吗?

4

2 回答 2

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')
于 2012-08-04T14:01:57.057 回答
0

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

于 2012-08-04T03:52:51.350 回答