2013-11-26 139 views
0

我正在嘗試自動化特定文件和文件夾下特定文件夾的搜索和刪除操作。下面是我所擁有的文件夾結構:使用Python查找並刪除目錄中的特定文件和子目錄

主目錄是MasterFolder,其中包括多個子目錄,它們是子文件夾Fol1,Fol2,Fol3,Fol4子目錄可能會改變文件夾到文件夾。

子文件夾有更多的文件和子文件夾。 ExL Fol1保存一些文件文件夾,sometext.txt,AnotherFilesFolder同樣適用於MasterFolder下的其他Fol2,Fol3等子目錄。

現在我想要做的是傷口想要掃描MasterFolder並瀏覽每個ChildFolder,並在每個子文件夾下查找1個名爲someText.txt的文件和1個名爲someFilesFolder的文件夾,並刪除它們。理想情況下,我想要刪除的文件夾名稱和文件名在每個ChildFolder下都是相同的,因此查找應該只發生在MasterFolder的一個級別。我檢查了多篇文章,但所有內容都指定在一個文件夾下使用shutil.rmtree刪除特定文件或目錄,但是我正在尋找一些可以遞歸查找和刪除的東西,我相信。

+0

作爲一個方面說明,是否有一個原因,你必須在Python而不是僅僅使用shell來做到這一點?例如,'rm -rfv /path/to/MasterFolder/*/someText.txt/path/to/MasterFolder/*/someFilesFolder'將在任何類似POSIX的shell中執行您想要的操作(sh-style或csh-style ),而且我非常確定在Windows和cmd或Powershell中,這並沒有太大困難。 – abarnert

回答

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.rmtreeos.unlink,所以......你完成了。


如果「理想地」實際上並沒有保證,而不是os.listdir,你將不得不使用os.walk。這稍微複雜一點,但如果你看看例子,那麼回過頭來閱讀例子中的文檔以獲取細節,這不難弄清楚。

+0

謝謝!我會試一試.. +1 – daaredevill

相關問題