Чтение строк файла через HTTP по требованию - PullRequest
0 голосов
/ 02 мая 2019

Что мне нужно сделать, это прочитать файл по HTTP порциями (итерировать по строкам, чтобы быть точным).Я хочу , а не , чтобы прочитать весь файл (или большую его часть), а затем разбить его на строки, а вместо этого прочитать небольшой (<= 8 КБ) фрагмент, а затем разделить егов линии.Когда все строки в чанке заняты, тогда получите следующий чанк. </p>

Я попробовал следующее:

with urllib.request.urlopen(url) as f:
  yield from f

Что не сработало.В Wireshark я вижу, что около 140 КБ из общего числа ~ 220 КБ получают, просто набрав urlopen(url).

Следующее, что я попробовал, было использовать requests:

with requests.get(url, stream=True) as req:
  yield from req.iter_lines()

, который также читаетоколо 140 КБ, просто позвонив get(url, stream=True).Согласно документации этого не должно происходить.Кроме этого, я не нашел никакой информации об этом поведении или о том, как его контролировать.Я использую запросы 2.21.0, CPython 3.7.3, в Windows 10.

1 Ответ

0 голосов
/ 02 мая 2019

В соответствии с docs и docs 2 (и учитывая, что источник фактически работает в чанках), я думаю, вы должны использовать iter_content, который принимает параметр chunk_size, который вы должен быть установлен в None:

with requests.get(url, stream=True) as req:
    yield from req.iter_content(chunk_size=None)

Я не пробовал, но кажется, что где-то в вашем коде что-то обращается к req.content до iter_lines, поэтому загружается весь полезный груз.

edit_ добавлен пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...