আপনি হয় 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
পুরো চিত্রটি মেমরিতে প্রথমে ডাউনলোড না হয়।