Elsendfluigi plurliniajn CSV-rikordojn per Python Requests kaj csv.reader
Elsendfluigu respondon tra prokura servilo en csv.reader kaj konservu rikordajn limojn anstataŭ dividi ĉiun fizikan linion ĉe la disigilo.
stream=True ebligas komenci prilaboradon antaŭ ol la korpo de respondo tra prokura servilo estas tute elŝutita. Por CSV, transdonu iteraciilon de tekstlinioj al csv.reader, por ke disigiloj en citiloj kaj plurliniaj rikordoj restu CSV-datumoj.
Por ilustra UTF-8-dosiero uzanta punktkomojn:
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
Elektu la realan kodadon kaj dialekton de la dosiero. Por publika elŝuto de CSV tra permesata publika prokura vojo, la listo de HTTP-prokuraj serviloj proponas kandidatojn por la routes-URL. Ĉi tiu versio normaligas fizikajn linifinojn al LF: iter_lines forigas ilin, kaj la generatoro realdonas novan linion por la CSV-analizilo. Tio gravas kiam kampo en citiloj daŭras sur alia fizika linio.
Por laborfluoj bezonantaj bajte precizan konservadon de enmetitaj CRLF-signoj, uzu fluigan tekstan envolvilon, kiu konservas tiujn linifinojn. La intenca normaligado de la ekzemplo taŭgas por rikordorientita prilaborado, kie LF estas la celata reprezento.
Unu respondo, multaj legadoj
La iteraciilo konsumas blokojn el unu HTTP-respondo. Ĝi ne eldonas novan peton por ĉiu linio. HTTP Range-petoj estas alia mekanismo kaj ne nature identigas CSV-rikordajn limojn.
Voki response.text aŭ kolekti ĉiujn vicojn en liston reportus la tutan enhavon en la memoron. Fluigado ankoraŭ bezonas spacon por transportaj bufroj kaj la nuna rikordo, kiu mem povas enhavi grandan kampon.
La responda kunteksto fermas la korpon kiam la buklo eliras, ankaŭ ĉe frua kongruo. La lega tempolimo limigas atendadon de alvenantaj datumoj, ne la totalan vivdaŭron de granda dosiertransigo.