目的:獲得某目錄下(含子目錄)的所有文件的名稱。os.listdir函數只能列舉當前目錄下的文件名稱。所以參考寫了一個遞歸函數如下(注意因為是遞歸函數,所以這個flist 的變量需要在定義的子函數之外。):
import os
flist = []
def getFlist(path):
global flist
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
if dirs:
for i in dirs:
getFlist(os.path.join(path, i))
files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
for file in files:
flist.append(file)
return flist
resDir = 'res'
flist = getFlist(path)
還有另外一個更為簡單的方法,就是使用os.walk函數,代碼如下:
import os
def getFlist(path):
for root, dirs, files in os.walk(file_dir):
print('root_dir:', root)
print('sub_dirs:', dirs)
print('files:', files)
return files
resDir = 'res'
flist = getFlist(resDir)