Eu entendo os.walk certo?
O loop para root, dir, file inos.walk(startdir)
trabalha através destes passos?
for root in os.walk(startdir)
for dir in root
for files in dir
obtenha raiz do diretório inicial: C: \ dir1 \ dir2 \ startdir
obter pastas em C: \ dir1 \ dir2 \ startdir e retornar a lista de pastas "dirlist"
obter arquivos no primeiro item da lista e retornar a lista de arquivos "filelist" como o primeiro item de uma lista de listas de arquivos.
Mover para o segundo item em dirlist e retornar a lista de arquivos nesta pasta "filelist2" como o segundo item de uma lista de filelists. etc.
mover para a próxima raiz no foldertree e começar de 2. etc.
Certo? Ou é só pegar todas as raízes primeiro, depois todas as pastas em segundo e todos os arquivos em terceiro?