我正在尝试为特定文件夹下的特定文件和文件夹自动执行搜索和删除操作。下面是我的文件夹结构:
主目录是MasterFolder,它包含多个子目录,即子文件夹Fol1,Fol2,Fol3,Fol4,子目录可能因文件夹而异。
子文件夹包含更多文件和子文件夹。 ExL Fol1包含someFilesFolder,sometext.txt,AnotherFilesFolder同样适用于MasterFolder下的其他Fol2,Fol3等子目录。
现在我想要做的是我想要扫描MasterFolder并浏览每个ChildFolder并在每个子文件夹下查找名为someText.txt的1个文件和名为someFilesFolder的1个文件夹并删除它们。理想情况下,我想要删除的文件夹名称和文件名在每个ChildFolder下都是相同的,因此查找应该只发生在MasterFolder的一个级别。我检查了多篇文章,但是所有内容都指定在一个文件夹下使用shutil.rmtree删除特定文件或目录,但我正在寻找能够以递归方式执行查找和删除的内容。
答案 0 :(得分:1)
为了帮助您入门:
理想情况下,我想删除的文件夹名称和文件名在每个ChildFolder下都是相同的,因此查找应该只发生在MasterFolder的一个级别。
在MasterFolder
下浏览每个子文件夹的一种简单方法是循环遍历[os.listdir]('/path/to/MasterFolder')
。这将为您提供文件和子文件夹。您可以使用os.path.isdir
查看每个。但只是try
对它们进行操作就好像它们都是文件夹一样简单(而且效率更高,更干净),并通过无所事事/日志记录/任何看似合适的方式处理非文件夹上的异常。
您从listdir
返回的列表只是简单的名称,因此您需要os.path.join
将每个名称连接到/path/to/MasterFolder
。当然,您还需要使用它来连接"someTxt.txt"
和"someFilesFolder"
。
最后,当你在每个子目录上再次 listdir
时,只删除文件和子目录(如果它们存在),再次,它更简单(更简洁,更有效)每个人try
。你显然已经知道如何shutil.rmtree
和os.unlink
,所以......你已经完成了。
如果“理想情况下”实际上没有保证,则必须使用os.walk
而不是os.listdir
。这稍微复杂一些,但是如果你看一下这些例子,那么请回过头来阅读上面的文档,了解详细信息,不难理解。