Streyma fjöllínu CSV-færslum með Python Requests og csv.reader
Streymdu svari í gegnum proxy inn í csv.reader og varðveittu mörk færslna í stað þess að skipta hverri líkamlegri línu við aðgreilinn.
stream=True gerir kleift að hefja vinnslu áður en búið er að sækja allan líkama svars í gegnum proxy. Fyrir CSV skaltu senda textalínu-iterator í csv.reader svo að aðgreinar innan gæsalappa og fjöllínu færslur haldist CSV-gögn.
Fyrir dæmigerða UTF-8 skrá sem notar semíkommur:
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
Veldu raunverulega kóðun og mállýsku skrárinnar. Fyrir opinbera CSV niðurhal á leyfilegri opinberri proxy-leið býður HTTP-proxy listinn upp á frambjóðendur fyrir routes URL. Þessi útgáfa venjulegar líkamlegar línuendingar í LF: iter_lines fjarlægir þær og rafallinn bætir aftur við nýrri línu fyrir CSV-þáttarann. Það skiptir máli þegar svið innan gæsalappa heldur áfram á annarri líkamlegri línu.
Fyrir vinnuflæði sem krefjast bæta-nákvæmrar varðveislu á innfelldum CRLF stöfum, notaðu streymandi textaumbúð sem varðveitir þessar línuendingar. Viljandi venjulegur dæmisins hentar færslumiðaðri vinnslu þar sem LF er fyrirhuguð framsetning.
Eitt svar, margir lestrar
Iteratorinn eyðir bútum úr einu HTTP-svari. Hann sendir ekki nýja beiðni fyrir hverja línu. HTTP Range beiðnir eru annar gangverk og greina ekki mörk CSV-færslna af sjálfu sér.
Að kalla response.text eða safna öllum röðum í lista myndi færa allt efnið aftur í minnið. Streymi þarf samt pláss fyrir flutningsbiðminni og núverandi færslu, sem getur sjálf innihaldið stórt svið.
Svarssamhengið lokar líkamanum þegar lykkjan hættir, þar á meðal við snemma samsvörun. Lestrar tímatakmarkið takmarkar bið eftir innkomandi gögnum, ekki heildarlíftíma stórrar skráarflutnings.