stream=True ļauj sākt apstrādi pirms caur starpniekserveri saņemtās atbildes pamatteksts ir pilnībā lejupielādēts. CSV gadījumā nododiet teksta rindu iteratoru csv.reader, lai pēdiņās esošie atdalītāji un vairāku rindu ieraksti paliktu CSV datu veidā.

Ilustratīvam UTF-8 failam ar semikoliem:

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

Izvēlieties faila faktisko kodējumu un dialektu. Publiskai CSV lejupielādei atļautā publiska starpniekservera maršrutā HTTP starpniekserveru saraksts piedāvā kandidātus routes URL. Šī versija normalizē fiziskās rindas beigas uz LF: iter_lines tās noņem, un ģenerators CSV parserim atkal pievieno jaunu rindu. Tas ir svarīgi, ja lauks pēdiņās turpinās nākamajā fiziskajā rindā.

Darbplūsmām, kurām nepieciešama ietverto CRLF rakstzīmju baitprecīza saglabāšana, izmantojiet straumējošu teksta ietvaru, kas saglabā šīs rindas beigas. Piemēra apzinātā normalizācija ir piemērota ierakstos orientētai apstrādei, kur LF ir paredzētais attēlojums.

Viena atbilde, daudzas lasīšanas

Iterators patērē vienas HTTP atbildes daļas. Tas neizsūta jaunu pieprasījumu katrai rindai. HTTP Range pieprasījumi ir cits mehānisms, un tie dabiski neidentificē CSV ierakstu robežas.

response.text izsaukšana vai visu rindu savākšana sarakstā atgrieztu visu saturu atpakaļ atmiņā. Straumēšanai joprojām nepieciešama vieta transporta buferiem un pašreizējam ierakstam, kurā pašā var būt liels lauks.

Atbildes konteksts aizver pamattekstu, kad cilpa beidzas, tostarp agrīnas atbilstības gadījumā. Lasīšanas taimauts ierobežo gaidīšanu uz ienākošajiem datiem, nevis liela faila pārsūtīšanas kopējo ilgumu.

Saistītie raksti