stream=True lit de ferwurking begjinne foardat de romp fan in antwurd fia in proxy folslein download is. Foar CSV jou in tekstregel-iterator oan csv.reader, sadat oanhellingstekens tusken skiedingstekens en records oer meardere rigels CSV-gegevens bliuwe.

Foar in yllustratyf UTF-8-bestân mei puntkomma's:

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 de werklike kodearring en dialekt fan it bestân. Foar in iepenbiere CSV-download oer in tastiene iepenbiere proxy-route biedt de HTTP-proxylist kandidaten foar de routes-URL. Dizze ferzje normalisearret fysike rigel-einen nei LF: iter_lines ferwideret se, en de generator foeget wer in nije rigel ta foar de CSV-parser. Dat makket út as in fjild tusken oanhellingstekens trochgiet op in oare fysike rigel.

Foar wurkstreams dy't byte-eksakte behâld fan ynbêde CRLF-tekens easkje, brûk in streamende tekst-omhulling dy't dy rigel-einen behâldt. De bewuste normalisaasje fan it foarbyld past by recordrjochte ferwurking wêr't LF de bedoelde foarstelling is.

Ien antwurd, in protte lêzingen

De iterator ferbrûkt stikken fan ien HTTP-antwurd. Hy stjoert net foar elke rigel in nij fersyk. HTTP Range-fersiken binne in oar meganisme en identifisearje fan harsels gjin recordgrinzen fan CSV.

response.text oanroppe of alle rijen yn in list sammelje soe de folsleine ynhâld wer yn it ûnthâld bringe. Streaming hat noch altyd romte nedich foar transportbuffers en it hjoeddeistige record, dat sels in grut fjild befetsje kin.

De antwurdkontekst slút de romp as de lus ferlit, ek by in iere oerienkomst. De lêstimeout beheint it wachtsjen op ynkommende gegevens, net de totale libbensdoer fan in grutte bestânsoerdracht.

Relatearre artikelen