淺析Python3中遍歷目錄的三種方法
一、目錄、文件夾、文件以及路徑的概念
在學(xué)習(xí)中,工作中,我們經(jīng)常會說遍歷一下當(dāng)前目錄咯。但是一旦被問到這個目錄到底是什么的時候,明明我們感覺自己知道是什么,卻又說不清楚到底是什么。沒關(guān)系,接下來我們來了解下,下次就可以說清楚啦……
中文名 | 英文名 | 說明 |
---|---|---|
目錄 | directory | 一系列文件和文件夾的集合 |
文件夾 | folder | 用來存放文件和文件夾的容器 |
文件 | file | 用來存儲信息的單個數(shù)據(jù)單元(文本、圖像、聲音等等) |
路徑 | path | 用于定位文件的路徑 |
從上表可以看出,目錄和文件夾意思差不多……
實際上目錄是DOS操作系統(tǒng)時期的稱呼,而Windows操作系統(tǒng)時期的稱呼為文件夾。
嚴(yán)格來說,目錄不是文件夾,因為目錄映射到存儲介質(zhì)上的物理位置,而文件夾不一定,例如桌面上的文件夾。
現(xiàn)在我們回過頭來看“遍歷一下當(dāng)前目錄”的含義,實際上就是遍歷一系列的文件與文件夾。
這些文件與文件夾和當(dāng)前路徑有著千絲萬縷的關(guān)系,因此我們會覺得當(dāng)前目錄的感覺又有點側(cè)重于路徑,不過它絕不是路徑。
二、三種遍歷目錄的方法
代碼 | 返回說明 |
---|---|
os.listdir(path) | 返回查詢路徑下的所有目錄的列表,不包括子孫目錄 |
os.walk(GenericPath) | 返回一個三元組的迭代器,其中元組(root,dirs,files) |
os.scandir(GenericPath) | 返回以一個DirEntry(目錄條目)對象的迭代器 |
先看看當(dāng)前目錄結(jié)構(gòu),這次就在命令行看吧。(想快速了解命令行如何使用,請看我CSDN中的另外一篇博客《Windows中的CMD不需要死記硬背》)
首先,我們得了解怎么用tree來查看當(dāng)前目錄樹,執(zhí)行tree /?
PS D:\Mine\PythonWork\k001_dir> tree /? 以圖形顯示驅(qū)動器或路徑的文件夾結(jié)構(gòu)。 TREE [drive:][path] [/F] [/A] /F 顯示每個文件夾中文件的名稱。 /A 使用 ASCII 字符,而不使用擴(kuò)展字符。
然后,我們使用tree /F查看當(dāng)前目錄樹結(jié)構(gòu),如下所示
PS D:\Mine\PythonWork\k001_dir> tree /F
文件夾 PATH 列表
卷序列號為 277B-1704
D:.
│ 0.txt
│ main.py
│
└─父目錄
│ 1.txt
│
└─子目錄
│ 21.txt
│ 22.txt
│ 23.txt
│
└─孫目錄
31.txt
32.txt
話不多說,直接代碼
# coding:utf-8 import os def traversal_dirs(path): # 遞歸遍歷目錄 listdir for dir in os.listdir(path): dir = os.path.join(path, dir) print(dir) if os.path.isdir(dir): traversal_dirs(dir) def untraversal_walk(path): # 無需遞歸遍歷目錄 walk for root, dirs, files in os.walk("."): # print("【root】:", root) # print("【文件夾】:", dirs) # print("【文件】:", files) # print("-"*20) for name in files: print(os.path.join(root, name)) for name in dirs: print(os.path.join(root, name)) def traversal_scandirs(path): # 遞歸遍歷目錄 candirs for item in os.scandir(path): print(item.path) if item.is_dir(): traversal_scandirs(item.path) if __name__ == "__main__": # NO1:只可以遍歷當(dāng)前目錄下的文件與文件夾 print("="*20, "traversal_dirs,結(jié)果如下:") traversal_dirs(".") # NO2:遍歷選擇的目錄下所有文件夾與文件 print("="*20, "untraversal_walk,結(jié)果如下:") untraversal_walk(".") # NO3:只可以遍歷當(dāng)前目錄下的文件與文件夾 print("="*20, "traversal_scandirs,結(jié)果如下:") traversal_scandirs(".")
最后,執(zhí)行python main.py
,結(jié)果輸出:
PS D:\Mine\PythonWork\k001_dir> python main.py
==================== traversal_dirs,結(jié)果如下:
.\0.txt
.\main.py
.\父目錄
.\父目錄\1.txt
.\父目錄\子目錄
.\父目錄\子目錄\21.txt
.\父目錄\子目錄\22.txt
.\父目錄\子目錄\23.txt
.\父目錄\子目錄\孫目錄
.\父目錄\子目錄\孫目錄\31.txt
.\父目錄\子目錄\孫目錄\32.txt
==================== untraversal_walk,結(jié)果如下:
.\0.txt
.\main.py
.\父目錄
.\父目錄\1.txt
.\父目錄\子目錄
.\父目錄\子目錄\21.txt
.\父目錄\子目錄\22.txt
.\父目錄\子目錄\23.txt
.\父目錄\子目錄\孫目錄
.\父目錄\子目錄\孫目錄\31.txt
.\父目錄\子目錄\孫目錄\32.txt
==================== traversal_scandirs,結(jié)果如下:
.\0.txt
.\main.py
.\父目錄
.\父目錄\1.txt
.\父目錄\子目錄
.\父目錄\子目錄\21.txt
.\父目錄\子目錄\22.txt
.\父目錄\子目錄\23.txt
.\父目錄\子目錄\孫目錄
.\父目錄\子目錄\孫目錄\31.txt
.\父目錄\子目錄\孫目錄\32.txt
到此這篇關(guān)于淺析Python3中遍歷目錄的三種方法的文章就介紹到這了,更多相關(guān)Python3遍歷目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm如何實現(xiàn)跨目錄調(diào)用文件
這篇文章主要介紹了pycharm如何實現(xiàn)跨目錄調(diào)用文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02pycharm 實現(xiàn)顯示project 選項卡的方法
今天小編就為大家分享一篇pycharm 實現(xiàn)顯示project 選項卡的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01只需要100行Python代碼就可以實現(xiàn)的貪吃蛇小游戲
貪吃蛇小游戲相信80、90后小時候肯定都玩過,那么你知道如果通過Python來實現(xiàn)嗎?今天就來教大家,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別
這篇文章主要介紹了詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-06-06Python streamlit構(gòu)建令人驚嘆的可視化Web高級主題界面
本文將深入探討Streamlit的方方面面,從基礎(chǔ)使用到高級主題,從數(shù)據(jù)可視化到部署與分享,更涵蓋了性能優(yōu)化、安全性考慮等最佳實踐,通過豐富的示例代碼和詳細(xì)解釋,將能夠全面了解Streamlit的強大功能,并在構(gòu)建數(shù)據(jù)驅(qū)動應(yīng)用時游刃有余2024-01-01Python 3.x 判斷 dict 是否包含某鍵值的實例講解
今天小編就為大家分享一篇Python 3.x 判斷 dict 是否包含某鍵值的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07