詳解python os.walk()方法的使用
python os.walk()方法
os.walk方法是python中幫助我們高效管理文件、目錄的工具,在深度學(xué)習(xí)中數(shù)據(jù)整理應(yīng)用的很頻繁,如數(shù)據(jù)集的名稱格式化、將數(shù)據(jù)集的按一定比例劃分訓(xùn)練集train_set、測試集test_set。
1.導(dǎo)入文件(使用os.walk方法前需要導(dǎo)入以下包)
import os import random # 后續(xù)用來將數(shù)據(jù)隨機(jī)打亂和生成確定隨機(jī)種子,保證每次生成的隨機(jī)數(shù)據(jù)一樣便于測試模型精準(zhǔn)度
2.os.walk()參數(shù)解釋
os.walk(top, topdown=True, οnerrοr=None, followlinks=False)(后兩個參數(shù)我?guī)缀鯖]用過)
參數(shù)
--top 我們需要遍歷的文件夾的地址(最好使用絕對地址,相對地址有時會出現(xiàn)未知錯誤) --topdown 該參數(shù)為True時,會優(yōu)先遍歷top目錄,否則優(yōu)先遍歷top的子目錄(默認(rèn)值為 True) --onerror 需要一個 callable 對象,當(dāng)walk需要異常時會調(diào)用 --followlinks 如果為真,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(默認(rèn)關(guān)閉)
os.walk 的返回值是一個生成器(generator),也就是說我們可以用循環(huán)去不遍歷它,來獲得其內(nèi)容。每次遍歷的對象都是返回的是一個三元組(root,dirs,files)
--root 指的是當(dāng)前正在遍歷的這個文件夾的本身的地址 --dirs 返回的是一個列表list,表中數(shù)據(jù)是該文件夾中所有的目錄的名稱(但不包括子目錄名稱) --files 返回的也是一個列表list , 表中數(shù)據(jù)是該文件夾中所有的文件名稱(但不包括子目錄名稱)
3.用于測試文件夾組織結(jié)構(gòu)
4.
廢話不說,看測試?yán)?/p>
4.1 os.walk(top, topdown=True)時打印返回的 root,dirs,files,順便測試下topdown為真和假時的遍歷順序的區(qū)別。(這里就不展示運行后的結(jié)果了,代碼拿走直接就可運行)
# topdown=True(該參數(shù)默認(rèn)為真)
def _get_img_info():
#測試時將data_dir 換為自己的目標(biāo)文件夾即可
data_dir = r'C:\Users\futiange\Desktop\Zero to Hero\expression_test\raw_data'
for root,dirs,files in os.walk(data_dir,topdown=True):
print('root={}'.format(root))
print('dirs={}'.format(dirs))
print('files={}'.format(files))
if __name__ == '__main__':
_get_img_info()
# topdown=False(該參數(shù)默認(rèn)為假)
def _get_img_info():
data_dir = r'C:\Users\futiange\Desktop\Zero to Hero\expression_test\raw_data'
for root,dirs,files in os.walk(data_dir,topdown=False):
print('root={}'.format(root))
print('dirs={}'.format(dirs))
print('files={}'.format(files))
if __name__ == '__main__':
_get_img_info()
4.2 使用案例
在深度學(xué)習(xí)中遍歷數(shù)據(jù)集時,我們可以對數(shù)據(jù)集劃分,這里按train :test = 9 : 1劃分。
import os
import random # 后續(xù)用來將數(shù)據(jù)隨機(jī)打亂和生成確定隨機(jī)種子,保證每次生成的隨機(jī)數(shù)據(jù)一樣便于測試模型精準(zhǔn)度
def _get_img_info(rng_seed,split_n,mode):
image_path_list = [] #用來存放圖片的路徑
label_path_list = [] #用來存放圖片對應(yīng)的標(biāo)簽
data_dir = r'C:\Users\futiange\Desktop\Zero to Hero\expression_test\raw_data'
for root,dirs,files in os.walk(data_dir):
for file in files:
path_file = os.path.join(root,file)
print(path_file)
if path_file.endswith(".jpg"): #判斷該路徑下文件是不是以.jpg結(jié)尾
#print(os.path.basename(root)) #輸出圖片路徑
#print(os.path.basename(root)[0]) #輸出該圖片所在的文件夾的第一個字符,我這里文件夾的第一個字符就是圖片的標(biāo)簽,測試時可以根據(jù)自己的文件夾名稱更改
#print(int(os.path.basename(root)[0]))
image_path_list.append(path_file) #將圖片路徑加入列表
label_path_list.append(os.path.basename(root)[0]) #根據(jù)文件夾名稱確定標(biāo)簽,并加入列表
data_info = [[n,l] for n,l in zip(image_path_list,label_path_list)] #將圖片路徑-標(biāo)簽 關(guān)聯(lián)起來
random.seed(rng_seed) # 該方法中傳入?yún)?shù),確保每次生成的種子都是一樣的
random.shuffle(data_info) #上一行代碼生成的種子是確定的,保證了每次將列表元素打亂后的結(jié)果一樣,便于測試模型性能
split_idx = int(len(data_info) * split_n) # data_len * 0.9 # split_n代表數(shù)據(jù)集劃分的比例
if mode == 'train':
img_set = data_info[:split_idx]
elif mode == 'val':
img_set = data_info[split_idx:]
else:
raise Exception("mode 無法識別,僅支持(train,valid)")
return img_set #返回隨機(jī)打亂后的數(shù)據(jù)集,后續(xù)在對其進(jìn)行格式化即可將數(shù)據(jù)集加載進(jìn)模型測試
if __name__ == '__main__':
_get_img_info(1,0.9,'train')
到此這篇關(guān)于詳解python os.walk()方法的使用的文章就介紹到這了,更多相關(guān)python os.walk()方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python關(guān)于os.walk函數(shù)查找windows文件方式
- Python文件遍歷os.walk()與os.listdir()使用及說明
- Python os.listdir與os.walk實現(xiàn)獲取路徑詳解
- python?中?os.walk()?函數(shù)詳解
- Python使用os.listdir和os.walk獲取文件路徑
- Python使用os.listdir()和os.walk()獲取文件路徑與文件下所有目錄的方法
- python 獲取文件下所有文件或目錄os.walk()的實例
- python使用os.listdir和os.walk獲得文件的路徑的方法
- python使用os模塊的os.walk遍歷文件夾示例
- Python中os.walk用法使用小結(jié)
相關(guān)文章
Ubuntu權(quán)限不足無法創(chuàng)建文件夾解決方案
這篇文章主要介紹了Ubuntu權(quán)限不足無法創(chuàng)建文件夾解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
如何優(yōu)雅地改進(jìn)Django中的模板碎片緩存詳解
這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅地改進(jìn)Django中的模板碎片緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Numpy中如何創(chuàng)建矩陣并等間隔抽取數(shù)據(jù)
這篇文章主要介紹了Numpy中如何創(chuàng)建矩陣并等間隔抽取數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實例講解
今天小編就為大家分享一篇PyTorch讀取Cifar數(shù)據(jù)集并顯示圖片的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
關(guān)于阿里云oss獲取sts憑證 app直傳 python的實例
今天小編就為大家分享一篇關(guān)于阿里云oss獲取sts憑證 app直傳 python的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

