我正在尝试为我的工作完成一个清理文件组织系统的脚本。我的脚本的最后一部分需要进入给定目录中的所有文件夹,并将每个文件夹中的所有文件移动到目录中。例如:
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”下的每个文件夹,通过将所有文件移动一级来清空文件夹,而无需在文档路径中输入文件夹名称或文件名,如下所示:
Documents
[________ Folder A
[_________ File 1
[_________ File 2
[________ Folder B
[_________ File 3
[_________ File 4
[________ Folder C
[_________ File 5
[_________ File 6
[_________ File 7
我是python的新手,我唯一想到如何有效地做到这一点就是输入很多进入每个文件夹目录的代码,以及shutil.move()。但是这对我的应用程序不起作用,因为脚本需要能够使用Y量的文件完成此X任务文件夹的任务,而不必输入每个文件夹路径。
我要求以有效的方式提出任何建议,我可以遍历我的'文件夹'列表,只需将文件从文件夹中移出到路径的目录中。
对于这篇长篇文章感到抱歉,我只想尽可能详细地说明我的问题,谢谢!
答案 0 :(得分:4)
我建议使用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
这会将所有内容移至顶级目录。