stream=True laat verwerking begin voordat 'n volmag-antwoordliggaam volledig afgelaai is. Vir CSV gee jy 'n teksreël-iterator aan csv.reader, sodat aangehaalde skeidingstekens en rekords oor meerdere reëls CSV-data bly.

Vir 'n illustratiewe UTF-8-lêer met puntkommas:

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

Kies die werklike lêer se enkodering en dialek. Vir 'n openbare CSV-aflaai op 'n toegelate openbare volmagroete bied die HTTP-volmaglys kandidate vir die routes-URL. Hierdie weergawe normaliseer fisiese reëleindes na LF: iter_lines verwyder hulle, en die generator voeg 'n nuwe reël terug vir die CSV-ontleder. Dit maak saak wanneer 'n aangehaalde veld op 'n ander fisiese reël voortduur.

Vir werksvloei wat die ingebedde CRLF-karakters byte-presies moet bewaar, gebruik 'n stromende teksomhulsel wat daardie reëleindes bewaar. Die voorbeeld se doelbewuste normalisering is geskik vir rekordgerigte verwerking waar LF die bedoelde voorstelling is.

Een antwoord, baie leesbewerkings

Die iterator verbruik stukke van een HTTP-antwoord. Dit stuur nie vir elke reël 'n nuwe versoek nie. HTTP Range-versoeke is 'n ander meganisme en identifiseer nie vanself CSV-rekordgrense nie.

Om response.text te roep of alle rye in 'n lys te versamel, sou die volle inhoud terug in die geheue bring. Stroming het steeds ruimte nodig vir vervoerbuffers en die huidige rekord, wat self 'n groot veld kan bevat.

Die antwoordkonteks sluit die liggaam wanneer die lus verlaat word, ook by 'n vroeë treffer. Die leesteltyd begrens 'n wag op inkomende data, nie die totale leeftyd van 'n groot lêeroordrag nie.

Verwante artikels