Перемещение файлов в папках в каталог верхнего уровня


Я пытаюсь завершить сценарий для своей работы, который очищает их файловую систему организации. Последняя часть моего сценария должна войти во все папки в данном каталоге и переместить все файлы в каждой папке в каталог. Например:

import os
path = 'C:/User/Tom/Documents'
folders = os.listdir(path)
print(folders)

Допустим, структура папок выглядит следующим образом:

Documents  
[________ Folder A    
..................[_________ File 1  
..................[_________ File 2  
[________ Folder B  
..................[_________ File 3  
..................[_________ File 4  
[________ Folder C  
..................[_________ File 5  
..................[_________ File 6  
..................[_________ File 7  

Моя цель-каким-то образом войти в каждую папку в разделе "Документы", очистить папки, переместив все файлы на один уровень вверх, не вводя имена папок или файлов. имена, которые должны быть в пути документов, который выглядит следующим образом:

Documents  
[________ Folder A    
[_________ File 1  
[_________ File 2  
[________ Folder B  
[_________ File 3  
[_________ File 4  
[________ Folder C  
[_________ File 5  
[_________ File 6  
[_________ File 7  

Я новичок в python, и моя единственная мысль о том, как эффективно это сделать, - это набрать много кода, который идет в каждую папку каталога, и шутил.переместить их. Однако это не будет работать для моего приложения, так как скрипт должен быть в состоянии выполнить эту задачу для X количество папок с Y количество файлов и не нужно вводить каждый путь к папке.

Я прошу любого совета по эффективному способу, который я могу пройдитесь по моему списку "папок" и просто переместите файлы из папки в каталог пути.
Извините за длинный пост, я просто хотел быть как можно более подробным о моем вопросе, спасибо!

1 3

1 ответ:

Я бы рекомендовал рекурсивный обход снизу вверх с использованием os.walk и соответствующим перемещением файлов.

import os
import shutil
doc_path = 'C:/User/Tom/Documents'

for root, dirs, files in os.walk(doc_path, topdown=False):
    for file in files:
        try:
            shutil.move(os.path.join(root, file), doc_path)
        except OSError:
            pass

Это переместит все в каталог верхнего уровня.