python讀取多層巢狀資料夾中的檔案例項
阿新 • • 發佈:2020-02-28
由於工作安排,需要讀取多層資料夾下巢狀的檔案,資料夾的結構如下圖所示:
想到了遞迴函式,使用python的os.path.isfile方法判斷當前是不是可執行檔案,如果不是再用os.listdir方法將子目錄迴圈判斷。
程式碼如下
import os path = 'abc' path_read = [] #path_read saves all executable files def check_if_dir(file_path): temp_list = os.listdir(file_path) #put file name from file_path in temp_list for temp_list_each in temp_list: if os.path.isfile(file_path + '/' + temp_list_each): temp_path = file_path + '/' + temp_list_each if os.path.splitext(temp_path)[-1] == '.log': #自己需要處理的是.log檔案所以在此加一個判斷 path_read.append(temp_path) else: continue else: check_if_dir(file_path + '/' + temp_list_each) #loop traversal check_if_dir(path) #print(path_read)
實現思想就是把所有可執行檔案的路徑,通過字串的拼接,完整的放進一個list中,在後面的執行步驟中依次提取進行訪問和操作。
由於自己拿到的資料集中,一個資料夾下要麼全是資料夾,要麼全是檔案,所以在第一次寫這個函式時,通過temp_list[0] 直接判斷list中第一個檔案是不是檔案。
所以自己第一次寫的程式碼有一個很大的bug,就是當一個資料夾下既有資料夾又有檔案的情況下,會嘗試將一個資料夾按照檔案讀取,報錯。
第一次程式碼如下:
import os path = 'abc' path_read = [] #path_read saves all executable files def check_if_dir(file_path): temp_list = os.listdir(file_path) #put file name from file_path in temp_list if os.path.isfile(file_path + '/' + temp_list[0]): #此處直接判斷list中第一項是不是檔案 for temp_list_each in temp_list: temp_path = file_path + '/' + temp_list_each if os.path.splitext(temp_path)[-1] == '.log': path_read.append(temp_path) else: continue else: for temp_list_each in temp_list: check_if_dir(file_path + '/' + temp_list_each) #loop traversal check_if_dir(path) #put all path in path_read #print(path_read)
以上這篇python讀取多層巢狀資料夾中的檔案例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。