1. 程式人生 > >python中如何遍歷資料夾及其子資料夾中的所有檔案(附實現程式碼)

python中如何遍歷資料夾及其子資料夾中的所有檔案(附實現程式碼)

【時間】2018.10.27

【題目】python中如何遍歷資料夾及其子資料夾中的所有檔案

目錄

概述

概述

      本文提供了python中如何遍歷資料夾及其子資料夾中的所有檔案的兩種方法。兩者均返回檔名列表(可以選擇檔名列表或者是包含完整路徑的檔名列表)。一種是使用os.listdir()函式+遞迴的方式,另一種用到了os.walk()函式,第二種方法比較簡便。

一、使用os.listdir()函式+遞迴的方式實現

【實現程式碼】:

import os


image_path = 'F:\\test\\frames'


# 遍歷資料夾及其子資料夾中的檔案,並存儲在一個列表中

# 輸入資料夾路徑、空檔案列表[]

# 返回 檔案列表Filelist,包含檔名(完整路徑)

def get_filelist(dir, Filelist):

    newDir = dir

    if os.path.isfile(dir):

        Filelist.append(dir)

        # # 若只是要返回檔案文,使用這個

        # Filelist.append(os.path.basename(dir))

    elif os.path.isdir(dir):

        for s in os.listdir(dir):

            # 如果需要忽略某些資料夾,使用以下程式碼

            #if s == "xxx":

                #continue

            newDir=os.path.join(dir,s)

            get_filelist(newDir, Filelist)

    return Filelist



if __name__ =='__main__' :

    list = get_filelist('F:\\test\\frames', [])

    print(len(list))

    for e in list:

        print(e)

【補充說明】:

1、os.path.basename()函式用於返回路徑path最後的檔名。若path以/或\結尾,那麼就會返回空值。例如:

二、使用os.walk()函式實現

【實現程式碼】

import os

path ='F:\\test\\frames'

def get_filelist(dir):

    Filelist = []

    for home, dirs, files in os.walk(path):

        for filename in files:

            # 檔名列表,包含完整路徑

            Filelist.append(os.path.join(home, filename))

            # # 檔名列表,只包含檔名

            # Filelist.append( filename)

    return Filelist

if __name__ =="__main__":

    Filelist = get_filelist(dir)

    print(len( Filelist))

    for file in  Filelist :

        print(file)

【補充說明】:

1、os.walk的函式宣告為:

walk(top, topdown=True, onerror=None, followlinks=False)

引數

  • top 是你所要便利的目錄的地址

  • topdown 為真,則優先遍歷top目錄,否則優先遍歷top的子目錄(預設為開啟)

  • onerror 需要一個 callable 物件,當walk需要異常時,會呼叫

  • followlinks 如果為真,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(預設關閉)

os.walk 的返回值是一個生成器(generator),也就是說我們需要不斷的遍歷它,來獲得所有的內容。

每次遍歷的物件都是返回的是一個三元組(root,dirs,files)

  • root 所指的是當前正在遍歷的這個資料夾的本身的地址

  • dirs 是一個 list ,內容是該資料夾中所有的目錄的名字(不包括子目錄)

  • files 同樣是 list , 內容是該資料夾中所有的檔案(不包括子目錄)