【问题标题】:Move files in folders to a top-level directory将文件夹中的文件移动到顶级目录
【发布时间】:2017-08-16 01:15:24
【问题描述】:

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

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 的新手,我唯一想到的如何有效地做到这一点就是输入大量进入每个文件夹目录的代码,然后 shutil.move() 它们。但是,这对我的应用程序不起作用,因为脚本需要能够为 X 数量的文件夹和 Y 数量的文件完成此任务,而不必输入每个文件夹路径。

我正在就一种有效的方法寻求任何建议,我可以循环浏览我的“文件夹”列表并将文件从文件夹中移出到路径的目录中。
抱歉发了这么长的帖子,我只是想尽可能详细地了解我的问题,谢谢!

【问题讨论】:

  • 您要清空文件夹并将文件上移一级吗?
  • @cᴏʟᴅsᴘᴇᴇᴅ 是的,可以循环遍历给定目录中的所有文件夹并将其中的文件上移一级!!
  • 我在这里找到了类似的答案 stackoverflow.com/questions/8858008/…>。这可能会有所帮助。
  • @Emma 感谢您的链接!我知道如何将文件移动到某些地方,但我遇到的问题是创建一个有效的循环,该循环具有字符串类型的给定路径,以便能够通过移动每个文件来清空该路径中的每个文件夹这些文件夹上一层。

标签: python file shutil


【解决方案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

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

【讨论】:

  • 我添加了 import shutil,但是我尝试了一个基本的 3 个文件夹布局,每个文件夹中都有随机文件。我收到此错误:TypeError:join() 参数必须是 str 或字节,而不是“列表”。知道如何解决吗?谢谢!
  • @Bkal05 我的错。现在试试?
  • @COLDSPEED 啊,是的,添加第二个 for 循环会将列表变成单独的字符串,这是有道理的!感谢您的帮助,我真的很感激!
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多