ባለብዙ መስመር CSV መዝገቦችን በPython Requests እና csv.reader ማስተላለፍ
የተተላለፈውን ምላሽ ወደ 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 አድራሻ እጩዎችን ይሰጣል። ይህ ቅጂ አካላዊ የመስመር መጨረሻዎችን ወደ LF ያመዛዝናል፦ iter_lines ያስወግዳቸዋል፣ ጀነሬተሩ ደግሞ ለCSV ተንታኙ አዲስ መስመር ይመልሳል። ይህ በጥቅስ የተካተተ መስክ ወደ ሌላ አካላዊ መስመር ሲቀጥል ያስፈልጋል።
የተካተቱትን የCRLF ቁምፊዎች በባይት ትክክለኛነት መጠበቅ ለሚፈልጉ የሥራ ፍሰቶች፣ እነዚያን የመስመር መጨረሻዎች የሚጠብቅ የፍሰት ጽሑፍ መጠቅለያ ዘዴ ተጠቀም። የምሳሌው ሆን ተብሎ የተደረገ ማመዛዘን LF የታሰበው ውክልና ለሆነበት በመዝገብ ላይ ያተኮረ ማቀነባበር ተስማሚ ነው።
አንድ ምላሽ፣ ብዙ ንባቦች
ተደጋጋሚው ከአንድ HTTP ምላሽ ቁርጥራጮችን ይወስዳል። ለእያንዳንዱ መስመር አዲስ ጥያቄ አይልክም። የHTTP Range ጥያቄዎች የተለያየ ዘዴ ናቸው፣ የCSV መዝገብ ወሰኖችንም በተፈጥሮ አይለዩም።
response.text መጥራት ወይም ሁሉንም ረድፎች በዝርዝር መሰብሰብ ሙሉውን ይዘት ወደ ማህደረ ትውስታ ይመልሳል። ፍሰት አሁንም ለማጓጓዣ ቋቶችና ለአሁኑ መዝገብ ቦታ ይፈልጋል፤ መዝገቡ ራሱ ትልቅ መስክ ሊይዝ ይችላል።
የምላሽ አውዱ ዑደቱ ሲወጣ አካሉን ይዘጋል፣ ቀደም ባለ ግጥሚያ ላይም። የንባብ ጊዜ ገደቡ የሚገድበው የሚመጡ ውሂብን መጠበቅን ነው፣ የአንድ ትልቅ ፋይል ሽግግር ጠቅላላ ዕድሜን አይደለም።