2012-10-10 4 views
9

पास करने के बिना फ़ाइल को ढूंढने के लिए क्या है, क्या किसी भी तरह से फ़ाइल को बिना किसी स्मृति के पढ़ने के लिए पाइथन में खोजने योग्य ज़िप फ़ाइल के अंदर फ़ाइल बनाने के लिए है?पाइथन में एक ज़िप फ़ाइल के भीतर एक फ़ाइल को मेमोरी

मैं स्पष्ट प्रक्रिया की कोशिश की, लेकिन मैं कोई त्रुटि मिलती है के बाद से फ़ाइल seekable नहीं है:

In [74]: inputZipFile = zipfile.ZipFile("linear_g_LAN2A_F_3keV_1MeV_30_small.zip", 'r') 

In [76]: inputCSVFile = inputZipFile.open(inputZipFile.namelist()[0], 'r') 

In [77]: inputCSVFile 
Out[77]: <zipfile.ZipExtFile at 0x102f5fad0> 

In [78]: inputCSVFile.se 
inputCSVFile.seek  inputCSVFile.seekable 

In [78]: inputCSVFile.seek(0) 
--------------------------------------------------------------------------- 
UnsupportedOperation      Traceback (most recent call last) 
<ipython-input-78-f1f9795b3d55> in <module>() 
----> 1 inputCSVFile.seek(0) 

UnsupportedOperation: seek 

उत्तर

8

सभी ज़िप फ़ाइलें के लिए ऐसा करने के लिए कोई रास्ता नहीं है। डिफलेट एक स्ट्रीम संपीड़न एल्गोरिदम है, जिसका अर्थ यह है कि फाइल के मनमानी हिस्सों को डिकंप्रेस करने का कोई तरीका नहीं है, इससे पहले कि सबकुछ खराब हो जाए। यह संभवतः उन फ़ाइलों के लिए लागू किया जा सकता है जिन्हें संग्रहीत किया गया है, लेकिन फिर आप प्रतिकूल स्थिति में आते हैं जहां कुछ प्रविष्टियां तलाश योग्य होती हैं और अन्य नहीं होती हैं।

+0

मैं देखता हूं, धन्यवाद। लेकिन जो मैं खोज रहा हूं, उससे टैर फाइलों के साथ संभव है, सही? – jbssm

+0

केवल तभी जब टैर फ़ाइल असम्पीडित है। जैसे ही आप gzip (DEFLATE) संपीड़न में फेंकते हैं, आपको वही समस्या मिलती है। –

+1

हालांकि यह फ्लाई पर होता है, मैं एक gzip संपीड़ित टैर फ़ाइल का उपयोग कर सकता हूं और इसके अंदर खोज सकता हूं, पाइथन या तो स्मृति में या कहीं भी एक टीएमपी डिस्क में डिकंप्रेस कर रहा है और प्रक्रिया को असम्पीडित फ़ाइल की तुलना में बहुत समय लगता है - इसके बारे में उदाहरण के लिए 1min बनाम 4 सेकंड मैं कोशिश कर रहा हूँ। सारी मदद के लिए धन्यवाद। – jbssm

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