我有以下课程:
class JsonIterator(object):
def __init__(self,folder):
self.root = os.path.join(os.getcwd(), folder)
self.fis = [fi for fi in os.listdir(folder) if "lyrics" in fi]
def __iter__(self):
i = 0
with open(os.path.join(self.root,self.fis[i])) as f:
yield json.load(f)
i += 1
它没有按照我想要的方式工作——它似乎没有超出第一个文件。我试过了
def __iter__(self):
i = 0
f = open(os.path.join(self.root, self.fis[i]))
js = json.load(f)
f.close()
yield js
i += 1
但无论哪种方式,len(list(JsonIterator("path/to/myfolder")))
都给了我1
,而且我知道文件夹中有多个文件。当然,另一种选择是
def __iter__(self):
i = 0
yield json.load(open(os.path.join(self.root, self.fis[i])))
i += 1
但是所有那些悬空的打开文件都占用了太多内存,我的进程被杀死了。
所以我该怎么做?我想过写一些装饰器,但我真的不明白它们是如何工作的,或者即使它可以解决我的问题。
谢谢!