stream=True membolehkan pemprosesan bermula sebelum badan respons melalui proksi dimuat turun sepenuhnya. Untuk CSV, hantar iterator baris teks kepada csv.reader supaya pemisah dalam petikan dan rekod berbilang baris kekal sebagai data CSV.

Untuk fail UTF-8 contoh yang menggunakan titik bertindih:

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

Pilih pengekodan dan dialek sebenar fail. Untuk muat turun CSV awam melalui laluan proksi awam yang dibenarkan, senarai proksi HTTP menyediakan calon untuk URL routes. Versi ini menormalkan penghujung baris fizikal kepada LF: iter_lines membuangnya, dan penjana menambah semula baris baharu untuk penghurai CSV. Itu penting apabila medan dalam petikan berterusan ke baris fizikal lain.

Untuk aliran kerja yang memerlukan pemeliharaan tepat bait bagi aksara CRLF terbenam, gunakan susunan pembalut teks penstriman yang mengekalkan penghujung baris tersebut. Penormalan sengaja dalam contoh sesuai untuk pemprosesan berorientasikan rekod yang LF ialah perwakilan yang dimaksudkan.

Satu respons, banyak bacaan

Iterator menggunakan ketulan daripada satu respons HTTP. Ia tidak mengeluarkan permintaan baharu untuk setiap baris. Permintaan HTTP Range ialah mekanisme lain dan tidak mengenal pasti sempadan rekod CSV secara semula jadi.

Memanggil response.text atau mengumpul semua baris ke dalam senarai akan membawa keseluruhan kandungan kembali ke memori. Penstriman masih memerlukan ruang untuk penimbal pengangkutan dan rekod semasa, yang boleh mengandungi medan besar.

Konteks respons menutup badan apabila gelung keluar, termasuk padanan awal. Had masa baca mengehadkan penantian data masuk, bukan jangka hayat keseluruhan pemindahan fail besar.

Artikel berkaitan