面試題 實現資料夾中檔案的遍歷輸出

2022-09-24 22:33:24 字數 2077 閱讀 6630

在之前的文章中:分享了基於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...