Эффективно читать CSV из HTTP :: Response - PullRequest
0 голосов
/ 30 августа 2018

Я хотел бы прочитать CSV с заголовками из HTTP :: Response :: Body без извлечения всего содержимого в память.

CSV.new занимает String или IO. Прямо сейчас мне нужно превратить тело ответа в String, вытянуть все это в память, прежде чем анализировать все это.

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

Можно ли построчно читать и анализировать тело ответа?

1 Ответ

0 голосов
/ 30 августа 2018

Согласно этому бенчмаркингу: https://dalibornasevic.com/posts/68-processing-large-csv-files-with-ruby

Использование памяти / занимаемая площадь при чтении из ввода-вывода минимально и оптимизировано с использованием CSV.new.

Задумывались ли вы об использовании open-uri для чтения удаленной конечной точки файла / http и передачи в CSV.new?

Примерно так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...