2010-10-06 6 views
10

में लूप का उपयोग करके फ़ाइल से पढ़ना मेरे पास एक फ़ाइल है जिसमें मैंने बड़ी संख्या में सूचियां डाली हैं.अब मैं इस फ़ाइल को स्मृति में लोड करना चाहता हूं और इसके अंदर डेटा का उपयोग करना चाहता हूं। मैंने अपना लोड करने की कोशिश की "अचार" की "लोड" विधि का उपयोग करके फ़ाइल करें, हालांकि, किसी कारण से यह मुझे फ़ाइल में पहला आइटम देता है। वास्तव में मैंने देखा कि यह केवल मेरी पहली सूची को स्मृति में लोड करता है और यदि मैं अपनी पूरी फ़ाइल (कई सूचियों) को लोड करना चाहता हूं तो मुझे अपनी फ़ाइल पर फिर से भरना होगा और प्रत्येक में "pickle.load (फ़ाइल नाम)" का उपयोग करना होगा। मैं लेता हूँ। समस्या यह है कि मुझे नहीं पता कि वास्तव में इसे लूप (या उसके दौरान) के साथ कैसे कार्यान्वित किया जाए, क्योंकि मुझे नहीं पता कि मैं अपनी फ़ाइल के अंत तक कब पहुंचता हूं। एक उदाहरण मुझे बहुत मदद करेगा। धन्यवादपिकल

उत्तर

9

कैसे इस बारे में:

lists = [] 
infile = open('yourfilename.pickle', 'r') 
while 1: 
    try: 
     lists.append(pickle.load(infile)) 
    except (EOFError, UnpicklingError): 
     break 
infile.close() 
+2

आप 'छोड़कर उपयोग __never__ चाहिए:'; हमेशा उस अपवाद को निर्दिष्ट करें जिसे आप पकड़ने की कोशिश कर रहे हैं (उदा। 'पिकलिंग एरर को छोड़कर:')। इसके अलावा, अनंत लूप के लिए पायथन मुहावरे 'जबकि 1' है, हालांकि यह nitpicky =) है। – katrielalex

+0

@ katrielalex - आप सही हैं, मैंने इसे ठीक किया है। @ होसेनिन - मैंने अब संभावित त्रुटियों का परीक्षण किया है, इसलिए अगर यह EOFError और UnpicklingError की तुलना में कोई अन्य त्रुटि उठाता है, तो इसे सूची में जोड़ें। – eumiro

+4

आधुनिक पाइथन को अनंत लूप के लिए 'True 'का उपयोग करना चाहिए। 'जबकि 1' का उपयोग पायथन कोड में किया गया था जो पीईपी 285 की भविष्यवाणी करता है, जिसने भाषा को' सही 'जोड़ा। –