Streyma fleirralinju CSV-førslum við Python Requests og csv.reader
Streyma svar gjøgnum proxy inn í csv.reader og varðveita mark milli førslna í staðin fyri at býta hvørja fysiska linju á skiljimerkinum.
stream=True letur viðgerðina byrja, áðrenn kropur ein svars gjøgnum proxy er heilt niðurtikin. Fyri CSV, send eina tekstlinju-iterator til csv.reader, so skilimerki inni í gásum og fleirralinju førslur verða verandi CSV-dáta.
Fyri eitt dømis UTF-8 fílu við semikolonum:
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
Vel veruliga encoding og dialekt fílunnar. Fyri almenna CSV-niðurtøku á loyvdum almennum proxy-leið HTTP-proxy listin veitir evni til routes URL. Hendan útgávan normar fysisk linjuendir til LF: iter_lines tekur teir burt, og generatorin leggur eina nýggja linju aftur fyri CSV-parsaran. Tað hevur týdning, tá eitt felt inni í gásum heldur fram á aðra fysiska linju.
Fyri arbeiðsfløður sum krevja byte-nágreina varðveiting av innbygdum CRLF-teknum, brúka eina streymandi tekst-innpakkingu sum varðveitir teir linjuendarnar. Hin viljandi normeringin í døminum hóskar til førslu-rada viðgerð har LF er ætlaða framsetingin.
Eitt svar, nógvar lesingar
Iteratorin nýtir bitar av einum HTTP-svari. Hon sendir ikki eina nýggja fyrispurning fyri hvørja linju. HTTP Range fyrispurningar eru annar mekanisma og eyðmerkja ikki av sær sjálvum mark milli CSV-førslna.
At kalla response.text ella savna allar raðir í ein lista fór at ført alt innihaldið aftur í minnið. Streymingar tørvur enn á plássi fyri flutningsbuffar og núverandi førslu, sum sjálv kann halda ein stóran felt.
Svar-kontekstin letur kropin, tá lykkjan fer út, eisini við tíðliga treffi. Les-tíðarmarkið avmarkar bíðing eftir innkomandi dáta, ikki samlaða lívstíð av einum stórari fíluflutningi.