Python文件遍歷os.walk()與os.listdir()使用及說明
Python文件遍歷os.walk()與os.listdir()
在圖片處理過程中,樣本數(shù)據(jù)的組織是個(gè)常見的問題,樣本組織好了,后面數(shù)據(jù)轉(zhuǎn)換、讀取等都能得心應(yīng)手。
在這里講一下我在準(zhǔn)備樣本時(shí)的一些心得
首先是os.walk()函數(shù)
os.walk(path)返回三個(gè)值:
parent
dirnames
filenames
分別表示path的路徑、path路徑下的文件夾的名字和path路徑下文件夾以外的其他文件;
我用下面的代碼來對(duì)樣本圖片建立標(biāo)簽:
不過不知walk到底是怎么遍歷的,我生成的標(biāo)簽順序亂了
所以這就想到用listdir來重新做標(biāo)簽:
os.listdir(path)返回一個(gè)包含path路徑下所有文件的列表
我用下面的方法來建立標(biāo)簽:
不過還是之前一樣的亂序,最后采用sort():
先獲取文件夾下圖片文件的名字列表list,再對(duì)圖片的序號(hào)進(jìn)行排序,將排序好的文件名列表逐一寫入txt中
os.walk和os.listdir遍歷目錄比較
假設(shè)存在下面的目錄和文件結(jié)構(gòu):
/a ----> /b ----> 1.py,2.py
----> /c ----> 3.py , 4.py
----> 5.py
----> 6.py
os.walk()
運(yùn)行下面的測試代碼
import os for root, dirs, files in os.walk('../a'): ?# 指向當(dāng)前的測試文件夾 ? ? print(root) ? ? print(dirs) ? ? print(files)
輸出結(jié)果,我們解析一下輸出結(jié)果
../a # 當(dāng)前遍歷的根目錄
['b', 'c'] # 根目錄下的兩個(gè)子目錄b,c
['5.py', '6.py'] # 根目錄下的兩個(gè)子文件
../a\b # 遍歷根目錄下的子目錄b
[] # 子目錄b中的子目錄
['1.py', '2.py'] # 子目錄b中的文件
../a\c # 遍歷根目錄下的子目錄c
[] # 子目錄c中的子目錄
['3.py', '4.py'] # 子目錄c中的文件
os.listdir()
運(yùn)行如下測試代碼
for f in os.listdir('../a'): ? ? print(f)
輸出結(jié)果
5.py
6.py
b
c
兩種方法比較
os.walk將當(dāng)前目錄下的所有子目錄及其中的內(nèi)容,都會(huì)遍歷到;而os.listdir只會(huì)遍歷當(dāng)前目錄中所包含的內(nèi)容。當(dāng)存在如下的目錄級(jí)別時(shí)
/a ----> /b ------> b1.txt b2.txt
----> /c ------> c1.txt c2.txt
----> /d ------> d1.txt d2.txt
當(dāng)我們想要將所有的txt文件提取出來,此時(shí)使用os.walk是最好的選擇,直接將files遍歷即可,因?yàn)閒iles在其父目錄成為根目錄時(shí),會(huì)將當(dāng)前文件夾中的所有files遍歷出來,即:
import os? for root, dirs, files in os.walk('./a'): ? ? for file in files: ? ? ? ? print(file)
#運(yùn)行結(jié)果
b1.txt
b2.txt
c1.txt
c2.txt
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
從零開始學(xué)習(xí)Python與BeautifulSoup網(wǎng)頁數(shù)據(jù)抓取
想要從零開始學(xué)習(xí)Python和BeautifulSoup網(wǎng)頁數(shù)據(jù)抓取?本指南將為你提供簡單易懂的指導(dǎo),讓你掌握這兩個(gè)強(qiáng)大的工具,不管你是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,本指南都能幫助你快速入門并提升技能,不要錯(cuò)過這個(gè)機(jī)會(huì),開始你的編程之旅吧!2024-01-01淺談python socket函數(shù)中,send與sendall的區(qū)別與使用方法
下面小編就為大家?guī)硪黄獪\談python socket函數(shù)中,send與sendall的區(qū)別與使用方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Python如何保留float類型小數(shù)點(diǎn)后3位
這篇文章主要介紹了Python如何保留float類型小數(shù)點(diǎn)后3位,具有很好的參考價(jià)值,希望對(duì)的大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python+Tensorflow+CNN實(shí)現(xiàn)車牌識(shí)別的示例代碼
這篇文章主要介紹了Python+Tensorflow+CNN實(shí)現(xiàn)車牌識(shí)別的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解
下面小編就為大家分享一篇對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python創(chuàng)建簡單的神經(jīng)網(wǎng)絡(luò)實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于如何在Python中創(chuàng)建一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)的相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以參考下。2021-01-01使用python如何實(shí)現(xiàn)泛型函數(shù)
這篇文章主要介紹了使用python如何實(shí)現(xiàn)泛型函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)基礎(chǔ)概括
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中TensorFlow神經(jīng)網(wǎng)絡(luò)基礎(chǔ)概括,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10