Python中os.walk函數的用法(遍歷文件夾下文件並獲得路徑


Python中os.walk函數的用法(遍歷文件夾下文件並獲得路徑)

    Python中os.walk函數的用法(遍歷文件夾下文件並獲得路徑)
        參考文獻
        引言
        os.walk使用
        獲得所有子文件路徑(os.path.join使用)

參考文獻

https://blog.csdn.net/bagboy_taobao_com/article/details/8938126

https://www.jianshu.com/p/bbad16822eab

https://blog.csdn.net/lom9357bye/article/details/79285170

http://python-docs.com/python-files/python-os-path-join.html
引言

我們在使用python時時常會遇到調用某些文件的需求,這時我們就需要得到這些文件的路徑。python強大的自帶os模塊使得獲得路徑變得很容易。下面介紹如何使用os.walk函數來遍歷文件夾及子文件夾下所有文件並得到路徑。

os.walk的完整定義形式如下:

os.walk(top, topdown=True, onerror=None, followlinks=False)


參數:

    top:需要遍歷目錄的地址。
    topdown 為真,則優先遍歷top目錄,否則優先遍歷top的子目錄(默認為開啟)。
    onerror 需要一個 callable 對象,當walk需要異常時,會調用。
    followlinks 如果為真,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(默認關閉)。

以上四個參數一般只需要指定第一個文件夾路徑,剩下的一般情況不需要指定。
os.walk使用

os.walk 的返回值是一個生成器(generator),也就是說我們需要用循環不斷的遍歷它(不可以直接print),來獲得所有的內容。

每次遍歷的對象都是返回的是一個三元元組(root,dirs,files)

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

    注意,函數會自動改變root的值使得遍歷所有的子文件夾。所以返回的三元元組的個數為所有子文件夾(包括子子文件夾,子子子文件夾等等)加上1(根文件夾)。

舉例:

對於具有以下結構的目錄進行測試:

$ cd namesort/
$ tree
.
|-- namelist.txt
|-- nameout.txt
|-- namesorttest.py
`-- test
    |-- name2.txt
    |-- namelist.txt
    |-- nameout.txt
    `-- namesort.py


執行:

import os
path = '/home/jhxie/Workspace/namesort'
for root,dirs,files in os.walk(path):
        print root,dirs,files
輸出為:

/home/jhxie/Workspace/namesort ['test'] ['nameout.txt', 'namelist.txt', 'namesorttest.py']
/home/jhxie/Workspace/namesort/test [] ['nameout.txt', 'name2.txt', 'namelist.txt', 'namesort.py']

獲得所有子文件路徑(os.path.join使用)

由於os.walk獲得的並不是路徑,所以需要將其內容進行連接得到路徑。

這時使用python自帶函數os.path.join,其語法為:

os.path.join(path1[, path2[, ...]])

其中嵌套的[]表示寫在最前面的是高級目錄,后面的是低級的,也就是按參數排列順序拼接。

舉例:

os.path.join("home", "me", "mywork")


在Linux系統上會返回home/me/mywork
在Windows系統上會返回home\me\mywork

    可能大家已經注意到了,此函數並不是簡單的字符串連接函數,你不需要在輸入的參數字符串中加入分隔符,函數會根據你的系統自動加入對應的分隔符,這也是這個函數存在的意義所在。

所以我們正好使用os.path.join()來處理上面生成的遍歷結果:

import os
path = '/home/jhxie/Workspace/namesort'
for root,dirs,files in os.walk(path):
        for file in files:
                print(os.path.join(root,file))


輸出結果:

/home/jhxie/Workspace/namesort/nameout.txt
/home/jhxie/Workspace/namesort/namelist.txt
/home/jhxie/Workspace/namesort/namesorttest.py
/home/jhxie/Workspace/namesort/test/nameout.txt
/home/jhxie/Workspace/namesort/test/name2.txt
/home/jhxie/Workspace/namesort/test/namelist.txt
/home/jhxie/Workspace/namesort/test/namesort.py
————————————————
版權聲明:本文為CSDN博主「hairenvsgebaini」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_41562433/article/details/82995098


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM