用Ruby的Net-SFTP逐行读取文件

5

我正在使用Ruby 2.0.0和Rails 4.0.0。我有类似于这样的东西:

require 'net/sftp'


 sftp = Net::SFTP.start('ftp.app.com','username', :password => 'password')

 sftp.file.open("/path/to/remote/file.csv", "r") do |f|
    puts f.gets
 end 

这将在FTP站点上打开文件,但它只会put csv文件的第一行。我需要逐行阅读该文件,最好忽略标题。

如何逐行读取文件,而无需将文件下载到本地?

3个回答

5
我通过以下方式解决了这个问题:
data = sftp.download!("/path/to/remote/file.csv").split(/\r\n/)

data.each do |line|
  puts line
end

2
你的解决方案似乎不符合你的要求“不下载文件”? - user229044
我编辑了我的问题,添加了“本地”一词。这种方法只是将文件下载到内存中,因此我不需要存储文件的物理副本。 - Luigi

3

正确的答案应该是使用 file.eof? 值。

代码应该如下:

require 'net/sftp'
sftp = Net::SFTP.start('ftp.app.com','username', :password => 'password')
sftp.file.open("/path/to/remote/file.csv", "r") do |f|
  while !f.eof?
    puts f.gets
  end
end

文档可以在这里找到。


0
在我的情况下,类似这样的东西起作用了:
data = sftp.download!("/path/to/remote/file.csv").split(/\n/).map{ |e| e.split(/,/).map{ |x| x.gsub(/"/, "")} }

data.each do |line|
  puts line
end

还会将.csv文件的每一行拆分成不同的数组列,并删除任何多余的“”。请注意,这是针对Mac操作系统,其中换行符为\n。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接