Mitmerealiste CSV-kirjete voogesitamine Python Requestsi ja csv.readeriga
Voogesitage puhverserveri kaudu saadud vastus csv.readerisse ja säilitage kirjete piirid, selle asemel et jagada iga füüsilist rida eraldaja juures.
stream=True lubab töötlemist alustada enne, kui puhverserveri kaudu saadud vastuse keha on täielikult alla laaditud. CSV puhul edastage csv.readerile tekstiridade iteraator, et jutumärkides olevad eraldajad ja mitmerealised kirjed jääksid CSV-andmeteks.
Näitliku semikooloneid kasutava UTF-8-faili jaoks:
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
Valige faili tegelik kodeering ja dialekt. Avaliku CSV allalaadimise jaoks lubatud avaliku puhverserveri marsruudil pakub HTTP-puhverserverite loend kandidaate routes-URLi jaoks. See versioon normaliseerib füüsilised reavahetused LF-iks: iter_lines eemaldab need ja generaator lisab CSV-parseri jaoks reavahetuse tagasi. See loeb siis, kui jutumärkides olev väli jätkub teisel füüsilisel real.
Töövoogude jaoks, mis nõuavad manustatud CRLF-märkide bait-täpset säilitamist, kasutage voogesitavat tekstiümbrise lahendust, mis need reavahetused säilitab. Näite teadlik normaliseerimine sobib kirjepõhiseks töötlemiseks, kus LF on kavandatud esitus.
Üks vastus, palju lugemisi
Iteraator tarbib ühe HTTP-vastuse tükke. See ei saada iga rea jaoks uut päringut. HTTP Range päringud on teine mehhanism ega tuvasta CSV-kirjete piire iseenesest.
response.text kutsumine või kõigi ridade kogumine loendisse tooks kogu sisu mällu tagasi. Voogesitamine vajab endiselt ruumi transpordipuhvritele ja praegusele kirjele, mis võib ise sisaldada suurt välja.
Vastuse kontekst sulgeb keha tsüklist väljumisel, sealhulgas varajase vastavuse korral. Lugemise ajalõpp piirab saabuvate andmete ootamist, mitte suure failiedastuse kogukestust.