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

