python中os.walk的用法

python中os.walk是一個(gè)簡(jiǎn)單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。
1.載入
要使用os.walk,首先要載入該函數(shù)
可以使用以下兩種方法

import os
from os import walk

2.使用
os.walk的函數(shù)聲明為:
walk(top, topdown=True, onerror=None, followlinks=False)
參數(shù)

top 是你所要便利的目錄的地址
topdown 為真,則優(yōu)先遍歷top目錄(廣度遍歷),否則優(yōu)先遍歷top的子目錄(深度遍歷,默認(rèn)為開(kāi)啟)
onerror 需要一個(gè) callable 對(duì)象,當(dāng)walk需要異常時(shí),會(huì)調(diào)用
followlinks 如果為真,則會(huì)遍歷目錄下的快捷方式(linux 下是 symbolic link)實(shí)際所指的目錄(默認(rèn)關(guān)閉)

os.walk 的返回值是一個(gè)生成器(generator),也就是說(shuō)我們需要不斷的遍歷它,來(lái)獲得所有的內(nèi)容。
每次遍歷的對(duì)象都是返回的是一個(gè)三元組(root,dirs,files)

root 所指的是當(dāng)前正在遍歷的這個(gè)文件夾的本身的地址
dirs 是一個(gè) list ,內(nèi)容是該文件夾中所有的目錄的名字(不包括子目錄)
files 同樣是 list , 內(nèi)容是該文件夾中所有的文件(不包括子目錄)

如果topdown 參數(shù)為真,walk 會(huì)遍歷top文件夾,與top文件夾中每一個(gè)子目錄。
舉個(gè)例子
如果我們有如下的文件結(jié)構(gòu):

      a ->   b   ->   1.txt,  2.txt
             c   ->   3.txt
             d   ->   
           4.txt
           5.txt
for (root, dirs, files) in os.walk('a'):
    #第一次運(yùn)行時(shí),當(dāng)前遍歷目錄為 a
    所以 root == 'a'
         dirs == [ 'b', 'c', 'd']
         files == [ '4.txt', '5.txt']

    # 接著遍歷 dirs 中的每一個(gè)目錄
    b:  root  = 'a\\b'
        dirs  = []
        files = [ '1.txt', '2.txt']
    
    # dirs為空,返回
    # 遍歷c
    c:  root  = 'a\\c'
        dirs  = []
        files = [ '3.txt' ]
    
    PS : 如果想獲取文件的全路徑,只需要 
    for f in files:
        path = os.path.join(root,f)
    
    # 遍歷d
    d:  root  = 'a\\b'
        dirs  = []
        files = []

    遍歷完畢,退出循環(huán)

3.簡(jiǎn)單的例子

保持目錄 a 的目錄結(jié)構(gòu),在 b 中創(chuàng)建對(duì)應(yīng)的文件夾,并把a(bǔ)中所有的文件加上后綴 _bak

import os

Root = 'a'
Dest = 'b'

for (root, dirs, files) in os.walk(Root):
    new_root = root.replace(Root, Dest, 1)
    if not os.path.exists(new_root):
        os.mkdir(new_root)
    
    for d in dirs:
        d = os.path.join(new_root, d)
        if not os.path.exists(d):
            os.mkdir(d)
    
    for f in files:
        # 把文件名分解為 文件名.擴(kuò)展名
        # 在這里可以添加一個(gè) filter,過(guò)濾掉不想復(fù)制的文件類型,或者文件名
        (shotname, extension) = os.path.splitext(f)
        # 原文件的路徑
        old_path = os.path.join(root, f)
        new_name = shotname + '_bak' + extension
        # 新文件的路徑
        new_path = os.path.join(new_root, new_name)
        try:
            # 復(fù)制文件
            open(new_path, 'wb').write(open(old_path, 'rb').read())
        except IOError as e:
            print(e)

轉(zhuǎn)載自http://www.lxweimin.com/p/bbad16822eab

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • python中os.walk是一個(gè)簡(jiǎn)單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。 1.載...
    MikuLovely閱讀 67,567評(píng)論 4 42
  • os.walk() 函數(shù)聲明:walk(top,topdown=True,onerror=None) 1>參數(shù)to...
    mugtmag閱讀 4,038評(píng)論 0 0
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,804評(píng)論 0 10
  • 前天和媽媽視頻聊天,突然被媽媽的神情觸動(dòng)了,有種落寞和無(wú)奈,那種神情關(guān)了視頻也無(wú)法平靜。晚上關(guān)上燈一個(gè)人,坐在大廳...
    許振閱讀 140評(píng)論 0 0
  • 肥進(jìn)閱讀 223評(píng)論 0 0