Python利用遞歸和walk()遍歷目錄文件的方法示例
前言
經(jīng)常需要檢查一個(gè)“目錄或文件夾”內(nèi)部有沒有我們想要的文件或者文件夾,就需要我們循環(huán)迭代出所有文件和子文件夾,Python中遍歷指定目錄下所有的文件和文件夾,包含多級(jí)目錄,有兩種方法,一種是通過遞歸思想去遍歷,另一種是os模塊的walk()函數(shù)下面話不多說,就來一起看看詳細(xì)的介紹:
列出目錄結(jié)構(gòu)
一.遞歸方法
#coding:utf-8 import os allfile=[] def getallfile(path): allfilelist=os.listdir(path) for file in allfilelist: filepath=os.path.join(path,file) #判斷是不是文件夾 if os.path.isdir(filepath): getallfile(filepath) allfile.append(filepath) return allfile if __name__ == '__main__': path="C:\Users\zs\PycharmProjects\demo" allfiles=getallfile(path) for item in allfiles: print item #結(jié)果 C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt
借用遞歸的思想去列出所有文件夾中的內(nèi)容,判斷如果是目錄就繼續(xù)調(diào)用本身的方法。
二.os模塊的walk()函數(shù)
os.walk(top, topdown=True, onerror=None, followlinks=False)
返回一個(gè)3個(gè)元素的元祖,(dirpath, dirnames, filenames),
- dirpath:要列出指定目錄的路徑
- dirnames:目錄下的所有文件夾
- filenames:目錄下的所有文件
參數(shù)一:top – 根目錄下的每一個(gè)文件夾(包含它自己), 產(chǎn)生3-元組 (dirpath, dirnames, filenames)【文件夾路徑, 文件夾名字, 文件名】。
參數(shù)二:topdown –可選,為True或者沒有指定, 一個(gè)目錄的的3-元組將比它的任何子文件夾的3-元組先產(chǎn)生 (目錄自上而下)。如果topdown為 False, 一個(gè)目錄的3-元組將比它的任何子文件夾的3-元組后產(chǎn)生 (目錄自下而上)。
參數(shù)三:onerror – 可選,是一個(gè)函數(shù); 它調(diào)用時(shí)有一個(gè)參數(shù), 一個(gè)OSError實(shí)例。報(bào)告這錯(cuò)誤后,繼續(xù)walk,或者拋出exception終止walk。
參數(shù)四:followlinks – 設(shè)置為 true,則通過軟鏈接訪問目錄。
#coding:utf-8 import os def getallfiles(path): allfile=[] for dirpath,dirnames,filenames in os.walk(path): for dir in dirnames: allfile.append(os.path.join(dirpath,dir)) for name in filenames: allfile.append(os.path.join(dirpath, name)) return allfile if __name__ == '__main__': path = "C:\Users\zs\PycharmProjects\demo" allfile=getallfiles(path) for file in allfile: print file #輸出結(jié)果 C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po
小結(jié)
兩種方法輸入結(jié)果是一樣的。但是在輸入的順序有差異。對(duì)比感覺python的os模塊的walk()方法比較簡單
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python數(shù)學(xué)建模StatsModels統(tǒng)計(jì)回歸之線性回歸示例詳解
這篇文章主要為大家介紹了Python數(shù)學(xué)建模中StatsModels統(tǒng)計(jì)回歸之線性回歸的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10python人工智能算法之差分進(jìn)化算法的實(shí)現(xiàn)
DE基于GA,正如進(jìn)化基于遺傳,和遺傳算法相比,差分進(jìn)化引入了差分變異模式,相當(dāng)于開辟了一條嶄新的進(jìn)化路徑,下面就來看看差分優(yōu)化算法是如何實(shí)現(xiàn)的吧2023-08-08python中List添加與刪除元素的幾種方法實(shí)例
列表基本上是?Python?中最常用的數(shù)據(jù)結(jié)構(gòu)之一了,并且刪除操作也是經(jīng)常使用的,下面這篇文章主要給大家介紹了關(guān)于python中List添加與刪除元素的相關(guān)資料,需要的朋友可以參考下2022-09-09Python爬蟲之網(wǎng)絡(luò)請(qǐng)求
這篇文章主要介紹了Python爬蟲之網(wǎng)絡(luò)請(qǐng)求,文章基于Python展開對(duì)網(wǎng)絡(luò)請(qǐng)求的相關(guān)介紹,需要的小伙伴可以參考一下2022-04-04python3.6.3安裝圖文教程 TensorFlow安裝配置方法
這篇文章主要為大家詳細(xì)介紹了python3.6.3及TensorFlow安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09解決Python爬蟲錯(cuò)誤之twisted.web.error.SchemeNotSupported: Unsu
這篇文章主要介紹了解決Python爬蟲錯(cuò)誤之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python?flask?框架使用flask-login?模塊的詳細(xì)過程
Flask-Login?是一個(gè)?Flask?模塊,可以為?Flask?應(yīng)用程序提供用戶登錄功能,這篇文章主要介紹了Python?flask?框架使用?flask-login?模塊,需要的朋友可以參考下2023-01-01Python中subplots_adjust函數(shù)的用法
這篇文章主要介紹了Python中subplots_adjust函數(shù)的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08