Python Requests ഉം csv.reader ഉം ഉപയോഗിച്ച് ഒന്നിലധികം വരികളുള്ള CSV റെക്കോർഡുകൾ സ്ട്രീം ചെയ്യുക
ഒരു പ്രോക്സിയിലൂടെയുള്ള പ്രതികരണം 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 വിളിക്കുന്നതോ എല്ലാ വരികളും ഒരു ലിസ്റ്റിലേക്ക് ശേഖരിക്കുന്നതോ മുഴുവൻ ഉള്ളടക്കവും വീണ്ടും മെമ്മറിയിലേക്ക് കൊണ്ടുവരും. സ്ട്രീമിംഗിന് ഇപ്പോഴും ഗതാഗത ബഫറുകൾക്കും നിലവിലെ റെക്കോർഡിനും സ്ഥലം വേണം, അതിൽ തന്നെ വലിയ ഫീൽഡ് ഉണ്ടായിരിക്കാം.
പ്രതികരണ സന്ദർഭം ലൂപ്പ് പുറത്തുപോകുമ്പോൾ ബോഡി അടയ്ക്കുന്നു, നേരത്തെയുള്ള പൊരുത്തത്തിലും. വായനാ സമയപരിധി വരുന്ന ഡാറ്റയ്ക്കായുള്ള കാത്തിരിപ്പ് പരിമിതപ്പെടുത്തുന്നു, വലിയ ഫയൽ കൈമാറ്റത്തിന്റെ ആകെ ആയുസ്സല്ല.