1. 程式人生 > 程式設計 >python讀取多層巢狀資料夾中的檔案例項

python讀取多層巢狀資料夾中的檔案例項

由於工作安排,需要讀取多層資料夾下巢狀的檔案,資料夾的結構如下圖所示:

python讀取多層巢狀資料夾中的檔案例項

想到了遞迴函式,使用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讀取多層巢狀資料夾中的檔案例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。