stream=True омогућава да обрада почне пре него што је тело одговора кроз прокси у потпуности преузето. За CSV проследите итератор текстуалних редова у csv.reader, тако да разделници под наводницима и вишередни записи остану CSV подаци.

За илустративну UTF-8 датотеку са тачка-запетом:

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

Изаберите стварно кодирање и дијалект датотеке. За јавно преузимање CSV-а преко дозвољене јавне прокси руте листа HTTP прокси сервера нуди кандидате за URL routes. Ова верзија нормализује физичке завршетке редова у LF: iter_lines их уклања, а генератор враћа нови ред за CSV парсер. То је важно када се поље под наводницима наставља на другом физичком реду.

За токове рада који захтевају бајт-тачно очување уграђених CRLF знакова, користите стримујући текстуални омотач који чува те завршетке редова. Намерна нормализација у примеру погодна је за обраду оријентисану на записе где је LF намеравани приказ.

Један одговор, много читања

Итератор троши делове једног HTTP одговора. Не шаље нови захтев за сваки ред. HTTP Range захтеви су други механизам и не препознају природно границе CSV записа.

Позивање response.text или сакупљање свих редова у листу вратило би цео садржај назад у меморију. Стримовање и даље захтева простор за транспортне бафере и тренутни запис, који сам може садржати велико поље.

Контекст одговора затвара тело када петља изађе, укључујући рано подударање. Временско ограничење читања ограничава чекање на долазне податке, а не укупан животни век преноса велике датотеке.

Повезани чланци