私は次のクラスを持っています:
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
しかし、それらのぶら下がっている開いているファイルはすべて、私のプロセスが殺されるほど多くのメモリを吸い込みます。
だから私は何をすべきですか?ある種のデコレータを書くことを考えましたが、それらがどのように機能するのか、あるいはそれが私の問題を解決したとしても、私は本当に理解していません。
ありがとう!