2015-04-24 8 views
5

मैं ऐप इंजन पर चलने वाली एक स्क्रिप्ट पर काम कर रहा हूं, इसलिए मेरे पास रैम सीमाएं हैं जिन्हें मुझे पालन करने की आवश्यकता है (ऐप इंजन के लिए विशिष्ट है जो कि 1024 एमबी है)।पूरी ज़िप फ़ाइल को स्मृति में लोड किए बिना डाउनलोड किए गए ज़िप से फ़ाइल सूची प्राप्त करने का तरीका?

मैं एक बड़ा संग्रह डाउनलोड कर रहा हूं, जिसमें से मुझे फ़ाइल सूची निकालने की आवश्यकता है। संग्रह स्वयं ही एक फ़ाइल है जिसे मैं बाद में ऑफ़लाइन उपयोग (यदि आवश्यक हो) के लिए संग्रहीत कर रहा हूं, लेकिन मुझे फ़ाइल सूची की आवश्यकता है क्योंकि मैं इसे खींचने पर ज़िप संग्रह में परिवर्तनों की खोज कर रहा हूं।

url = 'http://url.to/archive.zip' 
r = requests.get(url) 
file_mem = StringIO.StringIO(r.content) 
zip_file = zipfile.ZipFile(file_mem, 'r') 

# get the list of files 
file_list = zip_file.namelist() # list of files -- stored in memory 
StringIO वस्तु के साथ

, यह स्मृति में संपूर्ण संग्रह रखने रहा है:

यहाँ मैं अब कोड ब्लॉक है। क्या कोई तरीका है कि मैं अपनी फाइल को r.content ऑब्जेक्ट से फ़ाइल सूची में जा सकता हूं बिना पूरी फाइल को स्मृति में एक बार रखे?

उत्तर

0

ठीक है, फ़ाइल को डिस्क पर डाउनलोड करने के बारे में और फिर इसे पार्स करने के लिए ज़िपफाइल मॉड्यूल का उपयोग करने के बारे में - आपको स्मृति में सभी .zip सामग्री को रखने से बचाने के लिए, और उम्मीद है कि एक छोटे से ऐप इंजन उदाहरण पर ठीक काम करें ।

import zipfile 
import urllib 

url = 'http://url.to/archive.zip' 
urllib.urlretrieve(url, 'archive.zip') 

with zipfile.ZipFile('archive.zip', 'r') as myzip: 
    print myzip.namelist() 
संबंधित मुद्दे

 संबंधित मुद्दे