Есть ли эффективный способ выборки файлов из файловой системы, пока вы не достигнете целевого размера выборки в Python?
Например, допустим, у меня есть 10 миллионов файлов в произвольно вложенной структуре папок, и я хочуобразец из 20 000 файлов.
В настоящее время для плоских каталогов небольшого размера ~ 100k или около того я могу сделать что-то вроде этого:
import os
import random
sample_size = 20_000
sample = random.sample(list(os.scandir(path)), sample_size)
for direntry in sample:
print(direntry.path)
Однако это не масштабируетсяЧто ж.Итак, я подумал, может быть, поставить случайную проверку в цикл.Этот тип работает, но имеет проблему, если число файлов в каталоге близко к sample_size
, возможно, оно не подберет полную цель sample_size
, и мне нужно будет отслеживать, какие файлы были включены всэмплировать, а затем продолжать цикл до тех пор, пока я не заполню корзину сэмплов.
import os
import random
sample_size = 20_000
count = 0
for direntry in os.scandir(path):
if random.randint(0, 10) < 5:
continue
print(direntry.path)
count += 1
if count >= sample_size:
print("reached sample_size")
break
Есть идеи, как случайным образом сэмплировать большой выбор файлов из большой структуры каталогов?