遍历文件夹是一个很常用的功能吧。这里分别用两种方法实现: 

    第一种:使用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:

  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) 

这两种到底有什么区别呢?

这里先建立一个测试目录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 

下面通过运行如下代码:

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

输出结果为:

  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. >>>  

可以看出,对于第一种方法,输出总是先文件夹后文件名的,对于第二种,则是按照目录树结构以及按照首字母排序进行输出的。

另外之前打印出的目录树其实就是通过对第二种方法进行稍微修改实现的,如下:

  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