Python遍歷文件夾的兩種方法比較

    遍歷文件夾是一個很經常使用的功能吧。這裏分別用兩種方法實現: ide

    第一種:使用os.walk:
測試

  
  
           
  
  
  1. # -*- coding: utf-8 -*- 
  2. import os 
  3. def Test1(rootDir): 
  4.     list_dirs = os.walk(rootDir) 
  5.     for root, dirs, files in list_dirs: 
  6.         for d in dirs: 
  7.             print os.path.join(root, d)      
  8.         for f in files: 
  9.             print os.path.join(root, f) 

    第二種:使用os.listdir:spa

  
  
           
  
  
  1. # -*- coding: utf-8 -*- 
  2. import os 
  3. def Test2(rootDir): 
  4.     for lists in os.listdir(rootDir): 
  5.         path = os.path.join(rootDir, lists) 
  6.         print path 
  7.         if os.path.isdir(path): 
  8.             Test2(path) 

這兩種到底有什麼區別呢?xml

這裏先創建一個測試目錄E:\test,目錄結構以下:排序

  
  
           
  
  
  1. E:\TEST 
  2. │--A 
  3. │  │--A-A 
  4. │  │  │--A-A-A.txt 
  5. │  │--A-B.txt 
  6. │  │--A-C 
  7. │  │  │--A-B-A.txt 
  8. │  │--A-D.txt 
  9. │--B.txt 
  10. │--C 
  11. │  │--C-A.txt 
  12. │  │--C-B.txt 
  13. │--D.txt 
  14. │--E 

下面經過運行以下代碼:utf-8

  
  
           
  
  
  1. Test1('E:\TEST'
  2. print '=======================================' 
  3. Test2('E:\TEST'

輸出結果爲:string

  
  
           
  
  
  1. >>>  
  2. E:\TEST\A 
  3. E:\TEST\C 
  4. E:\TEST\E 
  5. E:\TEST\B.txt 
  6. E:\TEST\D.txt 
  7. E:\TEST\A\A-A 
  8. E:\TEST\A\A-C 
  9. E:\TEST\A\A-B.txt 
  10. E:\TEST\A\A-D.txt 
  11. E:\TEST\A\A-A\A-A-A.txt 
  12. E:\TEST\A\A-C\A-B-A.txt 
  13. E:\TEST\C\C-A.txt 
  14. E:\TEST\C\C-B.txt 
  15. ======================================= 
  16. E:\TEST\A 
  17. E:\TEST\A\A-A 
  18. E:\TEST\A\A-A\A-A-A.txt 
  19. E:\TEST\A\A-B.txt 
  20. E:\TEST\A\A-C 
  21. E:\TEST\A\A-C\A-B-A.txt 
  22. E:\TEST\A\A-D.txt 
  23. E:\TEST\B.txt 
  24. E:\TEST\C 
  25. E:\TEST\C\C-A.txt 
  26. E:\TEST\C\C-B.txt 
  27. E:\TEST\D.txt 
  28. E:\TEST\E 
  29. >>>  

能夠看出,對於第一種方法,輸出老是先文件夾後文件名的,對於第二種,則是按照目錄樹結構以及按照首字母排序進行輸出的。it

另外以前打印出的目錄樹其實就是經過對第二種方法進行稍微修改實現的,以下:class

  
  
           
  
  
  1. def Test3(rootDir, level=1): 
  2.     if level==1print rootDir 
  3.     for lists in os.listdir(rootDir): 
  4.         path = os.path.join(rootDir, lists) 
  5.         print '│  '*(level-1)+'│--'+lists 
  6.         if os.path.isdir(path): 
  7.             Test3(path, level+1
相關文章
相關標籤/搜索