आप या तो 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)
ध्यान दें कि पायथन को सुनिश्चित करने के लिए आपको गंतव्य फ़ाइल को बाइनरी मोड में खोलने की आवश्यकता नहीं है और आपके लिए नई रूपरेखाओं का अनुवाद करें। हम यह भी सेट करते हैं stream=True
ताकि requests
पूरी छवि पहले मेमोरी में डाउनलोड न हो।