Monday, 15 June 2015

python - Yield & closing file objects properly -


मेरे पास निम्न श्रेणी है:

  वर्ग JsonIterator (ऑब्जेक्ट): def __init __ (self , फ़ोल्डर): self.root = os.path.join (os.getcwd (), फ़ोल्डर) self.fis = [os.listdir (फ़ोल्डर) में फाई के लिए अगर डीआईएफ __iter __ (स्वयं) में "गीत": I = 0 ओपन के साथ (os.path.join (self.root, self.fis [i])) च: उपज json.load (f) i + = 1   

यह है काम नहीं कर रहा मैं इसे कैसे करना चाहता हूं - ऐसा लगता है कि पहली फाइल से परे नहीं जाना मैंने कोशिश की है

  def __iter __ (स्वयं): i = 0 f = open (os.path.join (self.root, self.fis [i])) js = json.load (F) f.close () उपज जेएस i + = 1   

लेकिन किसी भी तरह से, लेन (सूची (जेसनइटरेटर ("पथ / टू / मायफ़ोल्डर"))) मुझे 1 देता है, और मैं एक तथ्य के लिए जानता हूँ कि फ़ोल्डर में एक से अधिक फाइल है वैकल्पिक, निश्चित रूप से, कुछ ऐसा होगा

  def __iter __ (स्वयं): i = 0 उपज json.load (खुला (os.path.join (self.root, self.fis [ I])))) i + = 1   

लेकिन उन सभी खुली फाइलों को खिसकाने से मेरी प्रक्रिया को बहुत मेमोरी हो जाती है, मेरी प्रक्रिया को मार दिया जाता है

तो मुझे क्या करना चाहिए? मैंने किसी प्रकार की डेकोरेटर लिखने के बारे में सोचा, लेकिन मैं वास्तव में यह समझ नहीं पा रहा हूं कि ये काम कैसे करें, या यहां तक ​​कि अगर मेरी समस्या हल हो जाए।

धन्यवाद!

आपको self.fis में फ़ाइल नामों पर लूप की आवश्यकता है:

  class JsonIterator ( ऑब्जेक्ट): def __init __ (self, folder): self.root = os.path.join (os.getcwd (), फ़ोल्डर) self.fis = [os.listdir (फ़ोल्डर) में फाई के लिए अगर "lyrics" ] Def __iter __ (स्वयं): स्वयं के लिए फाई के लिए: खुले (os.path.join (self.root, fi)) के रूप में च: obj = json.load (f) उपज obj    

No comments:

Post a Comment