多数のファイルを含むディレクトリがあります。すべてのファイル名をメモリに保持したくはありませんが、ジェネレーターを使用してこれらのファイルのサブセットをランダムに取得したいと考えています。
投稿「ディレクトリからランダムなファイルを選択する最良の方法」にある情報を使用してこれを行うことができますが、ジェネレーターが同じファイルを 2 回返さないようにしたいと思います。したがって、最終的にジェネレーター (バッチを返す) を実行した後、ディレクトリ内のファイルのリスト全体を循環することになります。
私が考えることができる方法は、比較するファイルリストを作成し(すでに使用されているファイル名のリストを作成し、リストにない場合は返す)、ジェネレーターが結果を生成する回数が多いほど、実行に時間がかかります。
ディレクトリ内のファイル数に等しい数値の配列を作成した場合、配列から値をランダムにポップすると、その位置にあるファイルを取得できる方法はありますか? (これは、文字列の配列よりも大幅に少ないメモリを消費すると思います)
現在のコメントから、次のコードがあります。
def GetRandomFileListGenerator(self, path):
fileList = [f for f in listdir(path) if isfile(join(path, f))]
random.shuffle(fileList)
while(self.batchSize < len(fileList)):
yield fileList[:self.batchSize]
fileList = fileList[self.batchSize:]