2011-11-09 5 views
5

में एक ज़िप फ़ाइल में फ़ाइल जैसी ऑब्जेक्ट जोड़ना पाइथन ज़िपफ़ाइल एपीआई ZipFile.write या बाइट स्ट्रिंग को ZipFile.writestr पर फ़ाइल पथ से गुजरने की अनुमति देता है लेकिन बीच में कुछ भी नहीं है। मैं ऑब्जेक्ट जैसी फ़ाइल को पास करने में सक्षम होना चाहता हूं, इस मामले में django.core.files.storage.DefaultStorage लेकिन सिद्धांत में किसी भी फ़ाइल जैसी वस्तु। फिलहाल मुझे लगता है कि मुझे फ़ाइल को डिस्क में सहेजना होगा, या इसे स्मृति में पढ़ना होगा। इनमें से कोई भी सही नहीं है।पायथन

उत्तर

6

आप सही हैं, वे केवल दो विकल्प हैं। यदि आपकी DefaultStorage ऑब्जेक्ट बड़ी है, तो आप इसे पहले डिस्क पर सहेजने के साथ जाना चाहेंगे; अन्यथा, मैं का प्रयोग करेंगे:

zipped = ZipFile(...) 
zipped.writestr('archive_name', default_storage_object.read()) 

तो default_storage_object एक StringIO वस्तु है, यह default_storage_object.getvalue() उपयोग कर सकते हैं।