2013-09-07 4 views
5

एक छोटे से डेटा-प्राप्ति परियोजना में हम एक "घटना" के लिए पायथन के pickle स्टोर करने के लिए दर्ज आंकड़ों से, यानी का उपयोग हम आउटपुट फ़ाइल f में जोड़नेपाइपन अचार फ़ाइल से लूप में डेटा लोड करें?

pkl.dump(event, f, pkl.HIGHEST_PROTOCOL) 

जहां import cPickle as pkl साथ।

डेटा हम प्रत्येक घटना को पढ़ने के विश्लेषण में, लेकिन एक सामान्य फाइल के विपरीत जहां प्रसंस्करण एक नहीं बल्कि सुरुचिपूर्ण ढंग से एक हो सकता है में:

with open(filename) as f: 
    for line in f: 
     do_something() 

एक अचार फ़ाइल में सभी डेटा पर पाशन इस थोड़ा और अजीब हो जाता है:

with open(filename) as f: 
    try: 
     while True: 
      event = pkl.load(f) 
      do_something() 
    except (EOFError, UnpicklingError): 
     pass 

क्या यह संभव है बनाने के लिए अचार अधिक ऊपर नियमित रूप से फ़ाइलों के लिए उदाहरण की तरह पढ़ने?

उत्तर

9

हां, वास्तव में। घटनाओं एक पाश में पठनीय बनाने के लिए नीचे दिए गए इस जनरेटर का उपयोग करें:

def pickleLoader(pklFile): 
    try: 
     while True: 
      yield pkl.load(pklFile) 
    except EOFError: 
     pass 

अब आप बस लिख सकते हैं:

with open(filename) as f: 
    for event in pickleLoader(f): 
     do_something() 
संबंधित मुद्दे