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 або збирання всіх рядків у список повернуло б увесь вміст назад у пам'ять. Потоковій обробці все одно потрібне місце для транспортних буферів і поточного запису, який сам може містити велике поле.

Контекст відповіді закриває тіло після виходу з циклу, зокрема при ранньому збігу. Тайм-аут читання обмежує очікування вхідних даних, а не загальний час передавання великого файлу.

Схожі статті