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 कल गर्नु वा सबै पङ्क्तिहरू सूचीमा सङ्कलन गर्नुले सम्पूर्ण सामग्री फेरि स्मृतिमा ल्याउँछ। स्ट्रिमिङलाई अझै पनि यातायात बफर र हालको रेकर्डका लागि ठाउँ चाहिन्छ, जसमा आफैँ ठूलो क्षेत्र हुन सक्छ।
प्रतिक्रिया सन्दर्भले लूपबाट बाहिर निस्कँदा बडी बन्द गर्छ, चाँडो मिलान भएपनि। पढाइ समयसीमाले आउँदै गरेको डेटाको प्रतीक्षा सीमित गर्छ, ठूलो फाइल स्थानान्तरणको कुल आयु होइन।