1. 程式人生 > >深度遍歷和廣度遍歷

深度遍歷和廣度遍歷

深度遍歷

//A code block

import os def getAllFileST(path):

#定義列表儲存資料(模擬棧)
stack = []
#將path路徑的內容(字串,絕對路徑)壓棧(存入到stack列表中)
stack.append(path)

#只要stack中有內容,迴圈繼續
while len(stack) != 0:
    #出棧(從stack取出資料)
    filePath = stack.pop()
    #得到filePath路徑下的所有子內容(可能是檔案、目錄),將名字以列表形式返回
    file_list = os.listdir(filePath)
    #迴圈處理列表中的每一個元素
    for file in file_list:
        #將每個元素還原成為絕對路徑值
        fileAbsPath = os.path.join(filePath,file)
        if os.path.isfile(fileAbsPath):
            print('檔案:' + file)
        else:
            print('目錄:' + file)
            stack.append(fileAbsPath)

path = r’C:\Users\Administrator\Desktop\a’ getAllFileST(path)

廣度遍歷

//A code block

import collections,os #自定義函式:實現廣度遍歷 def getAllFileQU(path): #獲取一個佇列物件 queue = collections.deque() #往佇列中存資料(進隊、path) queue.append(path) while len(queue) != 0: #從佇列中取資料(出隊) filePath = queue.popleft() #得到filePath中的所有子內容,以列表返回 file_list = os.listdir(filePath) #迴圈處理列表中每一個元素 for file in file_list: fileAbsPath = os.path.join(filePath,file) #判斷是檔案還是目錄,分別處理 #注意:如果是目錄,先列印名字後進隊 if os.path.isdir(fileAbsPath): print(‘目錄:’ + file) queue.append(fileAbsPath) else: print(‘檔案:’ + file) path = r’C:\Users\Administrator\Desktop\a’ getAllFileQU(path)

遞迴遍歷

//A code block import os def getAllDir(path,sp=’’): filesList=os.listdir(path) sp+=" " print(filesList) #處理每一個檔案 (用絕對路徑) for filesName in filesList: fileabsPath = os.path.join(path, filesName) if os.path.isdir(fileabsPath): #path\fileNmae print(sp+“目錄:”,filesName) getAllDir(fileabsPath,sp) #呼叫自身 else: print(sp+“普通檔案”,filesName)

getAllDir(r"F:\pycharm1807\day09")