stream=True дазваляе пачаць апрацоўку да таго, як цела адказу праз проксі будзе цалкам спампавана. Для CSV перадайце ітэратар тэкставых радкоў у csv.reader, каб раздзяляльнікі ў лапках і запісы з некалькіх радкоў заставаліся данымі CSV.

Для ілюстрацыйнага файла UTF-8 з кропкамі з коскай:

import csv
import requests

routes = {'https': 'http://proxy.example:8080'}
with requests.get(
    'https://data.example/observations.csv',
    proxies=routes,
    stream=True,
    timeout=(5, 30),
) as response:
    response.raise_for_status()
    response.encoding = 'utf-8'
    lines = (
        line + '\n'
        for line in response.iter_lines(
            chunk_size=65536, decode_unicode=True)
    )
    for record in csv.reader(lines, delimiter=';'):
        if record and record[0] == 'wanted':
            print(record)
            break

Выбірайце фактычнае кадаванне і дыялект файла. Для публічнага спампоўвання CSV праз дазволены публічны проксі-маршрут спіс HTTP-проксі дае кандыдатаў для URL routes. Гэтая версія нармалізуе фізічныя канчаткі радкоў да LF: iter_lines выдаляе іх, а генератар дадае новы радок назад для парсера CSV. Гэта важна, калі поле ў лапках працягваецца на іншым фізічным радку.

Для працэсаў, якім патрабуецца пабайтавае захаванне ўбудаваных сімвалаў CRLF, выкарыстоўвайце патокавую тэкставую абгортку, якая захоўвае гэтыя канчаткі радкоў. Наўмысная нармалізацыя ў прыкладзе падыходзіць для арыентаванай на запісы апрацоўкі, дзе LF — мэтавае прадстаўленне.

Адзін адказ, шмат чытанняў

Ітэратар спажывае фрагменты аднаго HTTP-адказу. Ён не выдае новы запыт на кожны радок. Запыты HTTP Range — іншы механізм, і яны не вызначаюць межы запісаў CSV натуральным чынам.

Выклік response.text або збор усіх радкоў у спіс вярнуў бы ўвесь змест у памяць. Патокавасці ўсё яшчэ патрэбна месца для транспартных буфераў і бягучага запісу, які сам можа змяшчаць вялікае поле.

Кантэкст адказу закрывае цела пры выхадзе з цыклу, у тым ліку пры раннім супадзенні. Тайм-аўт чытання абмяжоўвае чаканне ўваходных даных, а не агульны час перадачы вялікага файла.

Падобныя артыкулы