将文件夹中的文件移动到顶层目录

Bka*_*l05 5 python file shutil

我正在尝试为我的工作完成一个脚本,以清理他们的文件组织系统。我的脚本的最后一部分需要进入给定目录中的所有文件夹,并将每个文件夹中的所有文件移动到该目录。例如:

import os
path = 'C:/User/Tom/Documents'
folders = os.listdir(path)
print(folders)
Run Code Online (Sandbox Code Playgroud)

可以说文件夹结构是这样的:

Documents  
[________ Folder A    
..................[_________ File 1  
..................[_________ File 2  
[________ Folder B  
..................[_________ File 3  
..................[_________ File 4  
[________ Folder C  
..................[_________ File 5  
..................[_________ File 6  
..................[_________ File 7  
Run Code Online (Sandbox Code Playgroud)

我的目标是以某种方式进入“文档”下的每个文件夹,通过将所有文件向上移动一层来清空文件夹,而不必在如下所示的“文档”路径中输入文件夹名称或文件名:

Documents  
[________ Folder A    
[_________ File 1  
[_________ File 2  
[________ Folder B  
[_________ File 3  
[_________ File 4  
[________ Folder C  
[_________ File 5  
[_________ File 6  
[_________ File 7  
Run Code Online (Sandbox Code Playgroud)

我是python的新手,关于如何高效地执行此操作的唯一想法是在每个文件夹目录中键入很多代码,然后对它们进行shutdownil.move()。但是,这对于我的应用程序将不起作用,因为脚本需要能够针对X数量的文件夹和Y数量的文件来完成此任务,而不必输入每个文件夹路径。

我想以有效的方式寻求任何建议,使我可以循环浏览“文件夹”列表,并将文件从文件夹中移出到路径目录中。
抱歉,很长的帖子,我只是想尽可能详细地回答我的问题,谢谢!

cs9*_*s95 5

我建议使用进行递归的自底向上遍历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
Run Code Online (Sandbox Code Playgroud)

这会将所有内容移到顶层目录。