CSV-records oer meardere rigels streame mei Python Requests en csv.reader
Stream in antwurd fia in proxy yn csv.reader en behâld recordgrinzen ynstee fan elke fysike rigel by de skiedingsteken te splitsen.
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.