溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python os.walk()方法的應用

發(fā)布時間:2021-06-18 14:13:24 來源:億速云 閱讀:138 作者:chen 欄目:開發(fā)技術

本篇內(nèi)容主要講解“python os.walk()方法的應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python os.walk()方法的應用”吧!

python os.walk()方法

os.walk方法是python中幫助我們高效管理文件、目錄的工具,在深度學習中數(shù)據(jù)整理應用的很頻繁,如數(shù)據(jù)集的名稱格式化、將數(shù)據(jù)集的按一定比例劃分訓練集train_set、測試集test_set。

1.導入文件(使用os.walk方法前需要導入以下包)

import os
import random # 后續(xù)用來將數(shù)據(jù)隨機打亂和生成確定隨機種子,保證每次生成的隨機數(shù)據(jù)一樣便于測試模型精準度

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的子目錄(默認值為 True)
--onerror 需要一個 callable 對象,當walk需要異常時會調(diào)用
--followlinks 如果為真,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(默認關閉)

os.walk 的返回值是一個生成器(generator),也就是說我們可以用循環(huán)去不遍歷它,來獲得其內(nèi)容。每次遍歷的對象都是返回的是一個三元組(root,dirs,files)

--root 指的是當前正在遍歷的這個文件夾的本身的地址
--dirs 返回的是一個列表list,表中數(shù)據(jù)是該文件夾中所有的目錄的名稱(但不包括子目錄名稱)
--files 返回的也是一個列表list , 表中數(shù)據(jù)是該文件夾中所有的文件名稱(但不包括子目錄名稱)

3.用于測試文件夾組織結構

python os.walk()方法的應用4.

廢話不說,看測試例子

4.1 os.walk(top, topdown=True)時打印返回的 root,dirs,files,順便測試下topdown為真和假時的遍歷順序的區(qū)別。(這里就不展示運行后的結果了,代碼拿走直接就可運行)

# topdown=True(該參數(shù)默認為真)
def _get_img_info(): 
	#測試時將data_dir 換為自己的目標文件夾即可
    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ù)默認為假) 
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 使用案例

在深度學習中遍歷數(shù)據(jù)集時,我們可以對數(shù)據(jù)集劃分,這里按train :test = 9 : 1劃分。

import os
import random # 后續(xù)用來將數(shù)據(jù)隨機打亂和生成確定隨機種子,保證每次生成的隨機數(shù)據(jù)一樣便于測試模型精準度

def _get_img_info(rng_seed,split_n,mode):
    image_path_list = [] #用來存放圖片的路徑
    label_path_list = [] #用來存放圖片對應的標簽
    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結尾
                #print(os.path.basename(root)) #輸出圖片路徑
                #print(os.path.basename(root)[0]) #輸出該圖片所在的文件夾的第一個字符,我這里文件夾的第一個字符就是圖片的標簽,測試時可以根據(jù)自己的文件夾名稱更改
                #print(int(os.path.basename(root)[0]))
                image_path_list.append(path_file) #將圖片路徑加入列表
                label_path_list.append(os.path.basename(root)[0]) #根據(jù)文件夾名稱確定標簽,并加入列表
    data_info = [[n,l] for n,l in zip(image_path_list,label_path_list)] #將圖片路徑-標簽 關聯(lián)起來
    random.seed(rng_seed) # 該方法中傳入?yún)?shù),確保每次生成的種子都是一樣的
    random.shuffle(data_info) #上一行代碼生成的種子是確定的,保證了每次將列表元素打亂后的結果一樣,便于測試模型性能
    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 #返回隨機打亂后的數(shù)據(jù)集,后續(xù)在對其進行格式化即可將數(shù)據(jù)集加載進模型測試
if __name__ == '__main__':
    _get_img_info(1,0.9,'train')

到此,相信大家對“python os.walk()方法的應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI