stream=True permite que o procesamento comece antes de que o corpo dunha resposta a través dun proxy se descargue por completo. Para CSV, pase un iterador de liñas de texto a csv.reader para que os delimitadores entre comiñas e os rexistros de varias liñas sigan sendo datos CSV.

Para un ficheiro UTF-8 ilustrativo con puntos e coma:

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

Escolla a codificación e o dialecto reais do ficheiro. Para unha descarga pública de CSV por unha ruta de proxy público permitida, a lista de proxies HTTP ofrece candidatos para o URL de routes. Esta versión normaliza os finais de liña físicos a LF: iter_lines elimínaos e o xerador volve engadir un salto de liña para o analizador CSV. Iso importa cando un campo entre comiñas continúa noutra liña física.

Para fluxos de traballo que requiren conservar byte a byte os caracteres CRLF incorporados, use un envoltorio de texto en fluxo que preserve eses finais de liña. A normalización deliberada do exemplo encaixa co procesamento orientado a rexistros onde LF é a representación prevista.

Unha resposta, moitas lecturas

O iterador consome fragmentos dunha soa resposta HTTP. Non emite unha petición nova por cada liña. As peticións HTTP Range son outro mecanismo e non identifican por si mesmas os límites dos rexistros CSV.

Chamar a response.text ou reunir todas as filas nunha lista traería todo o contido de volta á memoria. A transmisión aínda necesita espazo para os buffers de transporte e o rexistro actual, que pode conter el mesmo un campo grande.

O contexto da resposta pecha o corpo ao saír do bucle, incluíndo unha coincidencia temperá. O tempo de espera de lectura limita a espera de datos entrantes, non a vida total dunha transferencia de ficheiro grande.

Artigos relacionados