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