Բազմատող CSV գրառումների հոսքային մշակում Python Requests-ով և csv.reader-ով
Փոխանցեք պրոքսիով անցնող պատասխանը csv.reader-ին և պահպանեք գրառումների սահմանները՝ բաժանիչով յուրաքանչյուր ֆիզիկական տող բաժանելու փոխարեն։
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-ի կանչը կամ բոլոր տողերը ցանկի մեջ հավաքելը ամբողջ բովանդակությունը կվերադարձնի հիշողություն։ Հոսքային մշակմանը դեռ անհրաժեշտ է տեղ տրանսպորտային բուֆերների և ընթացիկ գրառման համար, որը ինքնին կարող է պարունակել մեծ դաշտ։
Պատասխանի կոնտեքստը փակում է մարմինը, երբ ցիկլը դուրս է գալիս, ներառյալ վաղ համընկնումը։ Ընթերցման ժամկետը սահմանափակում է մուտքային տվյալների սպասումը, ոչ թե մեծ ֆայլի փոխանցման ընդհանուր տևողությունը։