我只有數千個文件夾的大型結構,但是我只關心將文件夾保留在前三個級別,並刪除其餘部分。我正在尋找一個遞歸python腳本來做到這一點。任何幫助深表感謝。在大型結構的文件夾中遞歸地刪除第3級以下的文件夾
回答
未經檢驗的,但它可能會是這個樣子與os.walk()
:
import os
import shutil
BASE = '.'
for root, dirs, files in os.walk(BASE):
n = 0
head = root
while head and head != BASE:
head, _ = os.path.split(head)
n += 1
if n == 3:
for dir in dirs:
shutil.rmtree(os.path.join(root, dir))
del dirs[:] # clear dirs so os.walk() doesn't look for subdirectories
+1。但理論上,分隔符不一定是分隔符,無論它們出現在哪裏。如果Python移植到'/ foo/bar \/baz/qux'包含組件'foo','bar/baz','qux'或其中[foo \ bar]:baz \ qux包含組件'baz的系統'和'qux'在卷'foo \ bar'上,os.path.dirname(和walk,split等)將會工作,但在/ etc上計數/分割。 os.sep不會。 – abarnert 2012-07-07 00:06:38
@abarnert,好點,我編輯了我的答案,現在應該正確處理這種情況。 – 2012-07-08 01:00:22
做到這一點,正確的方法是用os.walk
,但這裏有一個便宜的答案:
>>> import os
>>> os.system('rm -rf */*/*/*/*')
>>> os.system('rmdir */*/*/*')
這將刪除所有文件至少四個層次中,然後再嘗試刪除紮根至少在三個層次中的所有目錄因爲前面的命令將刪除它們的內容,所以rmdir
將成功(並且抱怨它找到的所有非目錄葉子)。
- 1. pysmb刪除遞歸的文件夾子文件夾和文件
- 2. 遞歸刪除文件夾但排除命名文件夾
- 3. 刪除的文件夾結構在PHP
- 4. 以遞歸方式刪除文件夾時排除文件
- 5. 以遞歸方式刪除文件夾的內容,但保留文件夾
- 6. PHP遞歸刪除文件夾
- 7. SFTP非空文件夾遞歸刪除
- 8. Gulp - 遞歸刪除空文件夾
- 9. 如何遞歸刪除文件夾?
- 10. 遞歸從Dropbox下載大文件夾
- 11. 遞歸刪除目錄文件夾內同一級別的Linux
- 12. 文件/文件夾結構的遞歸搜索
- 13. 遞歸地tar'ing主文件夾的子文件夾
- 14. 遞歸文件夾
- 15. 如何遞歸刪除以「._」開頭的文件夾中的所有文件?
- 16. 在Windows cmd上遞歸刪除文件或文件夾
- 17. 遞歸刪除根文件夾下的權限
- 18. htaccess刪除文件夾的文件夾
- 19. PHP MVC文件夾結構/模型文件夾結構
- 20. Bash/python - 以條件遞歸刪除文件夾
- 21. 清除文件夾 - 刪除文件夾中的文件 - J2ME
- 22. 遞歸地應對文件夾結構,但排除最低級別的最新文件
- 23. 刪除除特定文件夾以外的所有文件夾
- 24. 以遞歸方式打印文件夾中的所有文件和文件夾
- 25. 擊:複製遞歸命名文件,保存文件夾結構
- 26. 從文件夾列表遞歸地創建文件夾數組
- 27. 使用Delphi遞歸刪除所有文件和文件夾
- 28. python刪除所有文件(遞歸)沒有文件夾本身
- 29. Git如何遞歸刪除文件和文件夾?
- 30. Linux:如何遞歸地刪除某些文件夾?
http://docs.python.org/library/os.path.html#os.path.walk – PasteBT 2012-07-06 22:15:33