我有一个包含大量文件的目录。我不想将所有文件名保留在内存中,但我想使用生成器随机获取这些文件的子集。
我可以使用帖子“从目录中选择随机文件的最佳方式”中找到的信息来执行此操作,但我想确保我的生成器永远不会返回相同的文件两次。所以最终在运行生成器(它将返回批次)之后,我将循环浏览目录中的整个文件列表。
我能想到的方法仍然会创建一个文件列表来进行比较(创建一个已使用的文件名列表,如果不在列表中则返回),并且生成器产生结果的次数越多,执行的时间就越长。
有没有办法,如果我创建一个与目录中文件数相等的数字数组,当我从数组中随机弹出一个值时,我可以在那个位置获取文件?(我认为这将比字符串数组占用更少的内存)
从当前的评论中,我有以下代码:
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:]