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 или собирањето на сите редови во листа би го вратило целиот содржај назад во меморија. Стримингот сепак бара простор за транспортни бафери и тековниот запис, кој сам по себе може да содржи големо поле.

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

Поврзани статии