python遞歸列出目錄及其子目錄下所有文件
一、前言
函數的遞歸,簡單來說,就是函數內部調用自己
先舉個小例子,求階乘
1 def factorial(n): 2 if n == 0: 3 return 1 4 else: 5 return n * factorial(n-1)
遞歸要注意兩個事項:
1、必須要有最后的默認結果,也就是最底層目錄的默認結果
if n == 0
2、遞歸參數必須向默認結果收斂
factorial(n-1)
要用到 os 模塊下的幾個方法
要用到 os 模塊下的幾個方法
二、遞歸列出目錄里的文件(包括子目錄,類似 linux下的find)
ps : 這個代碼對運維來說值得一學,反正我是覺得 python 頗強大的, 剛學,大家不喜勿噴 *_*
要用到 os 模塊下的幾個方法
import os
1、os.listdir('/root/python/') #列出當前目錄下所有文件
2、os.path.isdir('/abc') #判斷是否是目錄,返回布爾值,不存在也返回false
3、os.path.isfile('/etc/passwd') #判斷是否是文件
4、os.path.join('/etc/', 'passwd') #連接文件,返回/etc/passwd
1 #!/usr/bin/python 2 3 import os 4 import sys 5 6 def print_files(path): 7 lsdir = os.listdir(path) 8 dirs = [i for i in lsdir if os.path.isdir(os.path.join( 9 path, i))] 10 if dirs: 11 for i in dirs: 12 print_files(os.path.join(path, i)) 13 files = [i for i in lsdir if os.path.isfile(os.path.joi 14 n(path,i))] 15 for f in files: 16 print os.path.join(path, f) 17 18 print_files(sys.argv[1])
簡單解說下:
lsdir 列出當前目錄所有東西(文件+目錄)
dirs 返回當前目錄(path)下的所有目錄(不含子目錄)
for i in dirs: 是 dirs目錄下的下一個子目錄,不斷遞歸到最后一層
最后到達最深那層目錄,打印所有文件 files
注意:os.path.join 要進行連接操作的,我們需要完整目錄,不是相對目錄
三、調用及返回結果
python test.py /root/python
返回結果