【问题标题】:Find and delete specific file and sub directory within a directory using Python使用 Python 查找和删除目录中的特定文件和子目录
【发布时间】:2013-11-26 19:33:37
【问题描述】:

我正在尝试对特定文件夹下的特定文件和文件夹自动执行搜索和删除操作。以下是我拥有的文件夹结构:

主目录是 MasterFolder,其中包括多个子目录,即子文件夹 Fol1、Fol2、Fol3、Fol4,子目录可能因文件夹而异。

子文件夹有更多的文件和子文件夹。 ExL Fol1 包含 someFilesFolder、sometext.txt、AnotherFilesFolder,同样适用于 MasterFolder 下的其他 Fol2、Fol3 等子目录。

现在我想做的是我想扫描 MasterFolder 并遍历每个 ChildFolder 并在每个子文件夹下查找 1 个名为 someText.txt 的文件和 1 个名为 someFilesFolder 的文件夹并将其删除。理想情况下,我要删除的文件夹名称和文件名在每个 ChildFolder 下都是相同的,因此查找应该只发生在 MasterFolder 的下一层。我检查了多篇文章,但所有内容都指定使用 shutil.rmtree 在一个文件夹下删除特定文件或目录,但我正在寻找可以递归查找和删除的东西,我相信。

【问题讨论】:

  • 附带说明,您是否有理由必须在 Python 中执行此操作而不仅仅是使用 shell?例如,rm -rfv /path/to/MasterFolder/*/someText.txt /path/to/MasterFolder/*/someFilesFolder 将在任何类似 POSIX 的 shell(sh 样式或 csh 样式)中执行您想要的操作,而且我很确定在使用 cmd 或 Powershell 的 Windows 中它不会明显更难。

标签: python find delete-file


【解决方案1】:

让您开始:

理想情况下,我要删除的文件夹名和文件名在每个 ChildFolder 下都是相同的,因此查找应该只发生在 MasterFolder 的下一级。

遍历MasterFolder 下的每个子文件夹的一种简单方法是遍历 [os.listdir]('/path/to/MasterFolder')。这将为您提供文件和子文件夹。您可以使用os.path.isdir 检查它们。但是,只需 try 就好像它们都是文件夹一样对它们进行操作,并通过什么都不做/记录/任何看起来合适的方式来处理非文件夹上的异常,这要简单得多(并且更有效、更干净)。

您从listdir 返回的列表只是裸名称,因此您需要os.path.join 将每个名称连接到/path/to/MasterFolder。当然,您还需要使用它来连接"someTxt.txt""someFilesFolder"

最后,虽然您可以在每个子目录上再次listdir,并且只删除存在的文件和子目录,同样,@987654334 更简单(更简洁、更高效) @ 每一个。你显然已经知道如何shutil.rmtreeos.unlink,所以……你已经完成了。


如果实际上不能保证“理想情况”,则必须使用 os.walk 而不是 os.listdir。这稍微复杂一些,但是如果您查看示例,然后返回并阅读示例上方的文档以了解详细信息,就不难理解了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2012-04-02
    • 2017-10-08
    • 2020-09-04
    • 2014-09-03
    • 2019-11-01
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多