আপনি হয় response.rawফাইল অবজেক্টটি ব্যবহার করতে পারেন , বা প্রতিক্রিয়ার মাধ্যমে পুনরাবৃত্তি করতে পারেন ।
response.rawফাইল-জাতীয় অবজেক্টটি ব্যবহার করতে, ডিফল্টরূপে সংকোচিত প্রতিক্রিয়াগুলি ডিকোড করে না (GZIP বা ডিফল্ট সহ)। আপনি এটির জন্য decode_contentঅ্যাট্রিবিউট সেট করে যাইহোক আপনার জন্য ডিকম্প্রেস করতে বাধ্য করতে পারেন True( requestsএটি Falseডিকোডিং নিজেই নিয়ন্ত্রণ করতে সেট করে)। তারপরে আপনি shutil.copyfileobj()পাইথন কোনও ফাইল অবজেক্টে ডেটা স্ট্রিম করতে ব্যবহার করতে পারেন:
import requests
import shutil
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
প্রতিক্রিয়াটি পুনরাবৃত্তি করতে একটি লুপ ব্যবহার করুন; এরূপ পুনরাবৃত্তি নিশ্চিত করে যে ডেটা এই পর্যায়ে সংক্ষেপিত হয়:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
এটি 128 বাইট খণ্ডে ডেটা পড়বে; আপনি যদি মনে করেন অন্য খণ্ডের আকার আরও ভাল কাজ করে তবে একটি কাস্টম খণ্ড আকারের Response.iter_content()পদ্ধতিটি ব্যবহার করুন :
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
নোট করুন যে পাইথন আপনার জন্য নতুন লাইনের চেষ্টা ও অনুবাদ না করে তা নিশ্চিত করার জন্য আপনাকে গন্তব্য ফাইলটি বাইনারি মোডে খুলতে হবে open আমরা সেটও করেছি stream=Trueযাতে requestsপুরো চিত্রটি মেমরিতে প্রথমে ডাউনলোড না হয়।