stream=True aukera ematen du prozesamendua hasteko proxy baten bidezko erantzunaren gorputza erabat deskargatu aurretik. CSVrako, eman testu-lerroen iteratzaile bat csv.reader-i, komatxo arteko bereizleak eta hainbat lerroko erregistroak CSV datu izaten jarrai dezaten.

Puntu eta komak erabiltzen dituen UTF-8 fitxategi ilustratibo baterako:

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

Aukeratu fitxategiaren benetako kodeketa eta dialektoa. Baimendutako proxy publiko bide batetik CSV deskarga publiko baterako, HTTP proxy zerrendak hautagaiak eskaintzen ditu routes URLarentzat. Bertsio honek lerro fisikoen amaierak LF-ra normalizatzen ditu: iter_lines-ek kentzen ditu eta sortzaileak lerro-jauzi bat gehitzen du berriro CSV analizatzailearentzat. Hori garrantzitsua da komatxo arteko eremu bat beste lerro fisiko batera jarraitzen duenean.

Txertatutako CRLF karaktereak bytez byte kontserbatzea eskatzen duten lan-fluxuetarako, erabili lerro-amaiera horiek gordetzen dituen testu-bilgarri streaming bat. Adibidearen normalizazio nahita egokia da erregistroetara zuzendutako prozesamendurako, non LF den nahi den irudikapena.

Erantzun bat, irakurketa asko

Iteratzaileak HTTP erantzun bakarraren zatiak kontsumitzen ditu. Ez du eskaera berririk bidaltzen lerro bakoitzeko. HTTP Range eskaerak beste mekanismo bat dira eta ez dituzte CSV erregistroen mugak berez identifikatzen.

response.text deitzeak edo errenkada guztiak zerrenda batean biltzeak eduki osoa memoriara ekarriko luke. Streaming-ek garraio-bufferetarako eta uneko erregistrorako tokia behar du oraindik, eta erregistroak berak eremu handia izan dezake.

Erantzunaren testuinguruak gorputza ixten du begizta irtetean, bat-etortze goiztiarra izanda ere. Irakurketa-denborak sarrerako datuen itxaronaldia mugatzen du, ez fitxategi handi baten transferentziaren bizitza osoa.

Erlazionatutako artikuluak