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 պրոքսիների ցանկը առաջարկում է թեկնածուներ routes URL-ի համար։ Այս տարբերակը նորմալացնում է ֆիզիկական տողերի վերջերը LF-ի՝ iter_lines-ը հեռացնում է դրանք, իսկ գեներատորը նոր տող է ավելացնում CSV վերլուծիչի համար։ Դա կարևոր է, երբ չակերտների մեջ գտնվող դաշտը շարունակվում է մեկ այլ ֆիզիկական տողում։

Աշխատահոսքերի համար, որոնք պահանջում են ներկառուցված CRLF նիշերի բայթային ճշգրիտ պահպանում, օգտագործեք հոսքային տեքստային փաթաթման լուծում, որը պահպանում է այդ տողավերջերը։ Օրինակի դիտավորյալ նորմալացումը հարմար է գրառումներին ուղղված մշակման համար, որտեղ LF-ը նախատեսված ներկայացումն է։

Մեկ պատասխան, բազմաթիվ ընթերցումներ

Իտերատորը սպառում է մեկ HTTP պատասխանի մասեր։ Այն նոր հարցում չի ուղարկում յուրաքանչյուր տողի համար։ HTTP Range հարցումները այլ մեխանիզմ են և բնականաբար չեն ճանաչում CSV գրառումների սահմանները։

response.text-ի կանչը կամ բոլոր տողերը ցանկի մեջ հավաքելը ամբողջ բովանդակությունը կվերադարձնի հիշողություն։ Հոսքային մշակմանը դեռ անհրաժեշտ է տեղ տրանսպորտային բուֆերների և ընթացիկ գրառման համար, որը ինքնին կարող է պարունակել մեծ դաշտ։

Պատասխանի կոնտեքստը փակում է մարմինը, երբ ցիկլը դուրս է գալիս, ներառյալ վաղ համընկնումը։ Ընթերցման ժամկետը սահմանափակում է մուտքային տվյալների սպասումը, ոչ թե մեծ ֆայլի փոխանցման ընդհանուր տևողությունը։

Առնչվող հոդվածներ