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 غږول یا ټولې کرښې په یو لیست کې راغونډول به ټول منځپانګه بیرته حافظې ته راوړي. سټریمنګ لا هم د لېږد بفرونو او اوسني ریکارډ لپاره ځای ته اړتیا لري، چې پخپله لویه ساحه لرلی شي.

د ځواب شالید هغه مهال بدن تړي چې لوپ ووځي، د وختي سمون په صورت کې هم. د لوستلو وخت-بندیز د راتلونکو معلوماتو لپاره انتظار محدودوي، نه د یوې لویې فایل لېږد ټول عمر.

اړوندې مقالې