我正在尝试解析远程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
我有什么遗失的吗?
答案 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')