在之前的文章中:分享了基於python去遞迴查詢檔案中的檔案。在後續的接觸中,可以基於深度遍歷和廣度遍歷來實現
1.深度遍歷實現
對應實現思路:
1.建立棧
2.增加路徑
3.當棧不為空,處理棧的乙個路徑
4.遍歷路徑下面的每一項
5.遇到資料夾加入到棧中
6.知道棧中元素為空,退出
import os我們看下最後的結果path = '.'
def getalldeep(path):
stack =
# 處理棧,當棧為空時結束迴圈
while len(stack) != 0:
# 從棧裡取出資料
dirpath = stack.pop()
# 目錄下所有檔案
num = 0
file_num = 0
filelist = os.listdir(dirpath)
# 迴圈處理每個檔案
for filename in filelist:
fileabspath = os.path.join(dirpath,filename)
if os.path.isfile(fileabspath) == true:
print("是檔案",fileabspath)
num += 1
else:
# print("是目錄",fileabspath)
file_num += 1
print('當前檔案數量:%s' % num, '當前資料夾數量%s' % file_num, '路徑是:%s' % (fileabspath))
2.廣度優先遍歷實現
思路
1看下最後的**實現.建立乙個佇列
2.佇列增加檔案路徑
3.當佇列不為空,獲取佇列
4.遍歷某個路徑,判斷是檔案輸出,是資料夾加入佇列
5.直到隊列為空,程式終止執行。
import os, collections我們去傳遞乙個路徑,遍歷裡面檔案# 廣度遍歷目錄
def get_all_dir_scope(path:str):
#建立佇列
queue = collections.deque()
# 進隊
print("queue =", queue)
while len(queue) != 0:
# 出隊資料
file_path = queue.popleft()
# print(filepath)
# 找出所有的檔案
num = 0
file_num = 0
filenamelist = os.listdir(file_path)
for filename in filenamelist:
fileabspath = os.path.join(file_path, filename)
if os.path.isfile(fileabspath):
print("是檔案", fileabspath)
num += 1
else:
file_num += 1
print('當前檔案數量:%s' % num, '當前資料夾數量%s' % file_num, '路徑是:%s' % (fileabspath))
path = '.'最後列印結果get_all_dir_scope(path)
可以看到上面的結果,和我們想要的輸出是一致的。
基於廣度遍歷的方式就實現完畢。其實很簡單。
遍歷資料夾中檔案
import os 方法1 for root,dirs,files in os.walk path print root 根目錄 print dirs 目錄下資料夾 print files 目錄下檔案 方法2 for files in os.listdir path print files 方法3 ...
C 中檔案及資料夾的遍歷
操作檔案常用的類有 file 實用類,提供許多靜態方法,用於移動 刪除 和複製檔案。directory 實用類,提供許多靜態方法,用於移動 刪除和複製目錄。path 實用類,用於處理路徑名稱。fileinfo 表示磁碟上的物理檔案,具有可以處理此檔案的方法,要完成對檔案的讀寫工作,就必須建立stre...
golang 之 遍歷資料夾 並讀取檔案 按行輸出
package main import bufio fmt io io ioutil log os 檔案目錄樹形結構節點 type dirtreenode struct var icount int 0 遞迴遍歷檔案目錄 func getdirtree pathname string dirtree...