stream=True omogućava da obrada počne prije nego što je tijelo odgovora kroz proxy u potpunosti preuzeto. Za CSV proslijedite iterator tekstualnih redova u csv.reader, tako da razdjelnici pod navodnicima i višelinijski zapisi ostanu CSV podaci.

Za ilustrativnu UTF-8 datoteku s tačka-zapisom:

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

Odaberite stvarni kodni raspored i dijalekt datoteke. Za javno preuzimanje CSV-a preko dozvoljene javne proxy rute lista HTTP proxyja nudi kandidate za URL routes. Ova verzija normalizuje fizičke završetke redova u LF: iter_lines ih uklanja, a generator vraća novi red za CSV parser. To je važno kada se polje pod navodnicima nastavlja na drugi fizički red.

Za tokove rada koji zahtijevaju bajt-tačno očuvanje ugrađenih CRLF znakova, koristite strimujući tekstualni omotač koji čuva te završetke redova. Namjerna normalizacija u primjeru pogodna je za obradu orijentisanu na zapise gdje je LF namjeravani prikaz.

Jedan odgovor, mnogo čitanja

Iterator troši dijelove jednog HTTP odgovora. Ne šalje novi zahtjev za svaki red. HTTP Range zahtjevi su drugi mehanizam i ne identifikuju prirodno granice CSV zapisa.

Pozivanje response.text ili skupljanje svih redova u listu vratilo bi cijeli sadržaj u memoriju. Strimovanje i dalje zahtijeva prostor za transportne bafere i trenutni zapis, koji sam može sadržavati veliko polje.

Kontekst odgovora zatvara tijelo kada petlja izađe, uključujući rano podudaranje. Vremensko ograničenje čitanja ograničava čekanje na dolazne podatke, a ne ukupni životni vijek prijenosa velike datoteke.

Povezani članci