python實現讀取給定文件夾下文件目錄與文件信息(包括子文件夾)

(本文代碼是改寫調整過的代碼,原代碼可參考 android小站,博客網站是http://hkllzh.iteye.com/blog/1517917 )
注:由於源代碼在遞歸部分闡述稍欠清晰,文中所示爲改寫之後的遞歸代碼,測試後與源代碼功能相同
以下展示了一個功能是打印文件夾目錄的python代碼,注意程序的第20行,存在一處遞歸調用,現對代碼做出分析如下:
需求分析:我們需要打印出一個給定文件夾下所有文件信息,如果存在子文件夾,則需要打印子文件夾的相關信息,如果子文件夾下還有子文件夾,同理我們需要這個子子文件夾的信息。換言之,給定文件目錄下,所有層級的文件信息我們都要讀取出來
算法分析:在這個問題中,我們無法知道給定的文件目錄下到底有多少層級的子文件夾。在這個時候我們能夠想到的應該是使用遞歸算法,當遞歸到最後一個層級的子文件夾時,沒有其他子文件夾可以遍歷,那麼函數會逐級返回,從而我們獲得了所需要的文件目錄結構。
具體實現:
  1. #!/usr/bin/python
  2. # -*-coding: UTF-8 -*-
  3. import os
  4. allFileNum = 0
  5. def printPath(level, path):
  6. global allFileNum
  7. '''''
  8. 打印一個目錄下的所有文件夾和文件
  9. '''
  10. # 所有文件
  11. fileList = []
  12. # 返回一個列表,其中包含在目錄條目的名稱(google翻譯)
  13. files = os.listdir(path)
  14. for f in files:
  15. if(os.path.isdir(path + '/' + f)):
  16. if(f[0] != '.'): # 排除隱藏文件夾。因爲隱藏文件夾過多
  17. print '-' * level, f
  18. # 打印目錄下的所有文件夾和文件,目錄級別+1
  19. printPath((level + 1), path + '/' + f) #recursion
  20. if(os.path.isfile(path + '/' + f)):
  21. # 添加文件
  22. fileList.append(f)
  23. for fl in fileList:
  24. # 打印文件
  25. print '-' * level, fl
  26. # 隨便計算一下有多少個文件
  27. allFileNum = allFileNum + 1
  28. print "Please enter the directory path you want to list all file info: "
  29. yourPath = raw_input()
  30. if __name__ == '__main__':
  31. printPath(level = 1 , path = yourPath )
  32. print '總文件數 =', allFileNum


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章