代码之家  ›  专栏  ›  技术社区  ›  Schwern

从HTTP::响应有效地读取CSV

  •  0
  • Schwern  · 技术社区  · 6 年前

    HTTP::Response::Body 而不是把所有的内容放入内存。

    CSV.new 需要一个 String IO 字符串 ,在解析整个事件之前,将其全部放入内存中。

    CSV.new(response.body.to_s, headers: true).each do |row|
        ...
    end
    

    我可以逐行读取和解析响应正文吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tarek N. Elsamni    6 年前

    根据该基准: https://dalibornasevic.com/posts/68-processing-large-csv-files-with-ruby

    从IO读取的内存使用量/占用空间最小,使用 CSV.new .

    open-uri 将远程文件/http端点和流读取到 ?

    像这样:

    require 'open-uri'
    require 'csv'
    
    csv = CSV.new(open('https://somesite/data.csv'))
    
    while row = csv.shift # parse one by one with minimal memory footprint
      puts row.inspect
    end