Python中列出目錄中的文件的五種方法小結(jié)
1. 引言
文件和目錄相關(guān)操作是軟件工程師必備的基本技能。
我不是說將一個(gè)文件復(fù)制到Windows文件資源管理器上的另一個(gè)文件夾中。
我是說使用代碼來進(jìn)行自動(dòng)化批量處理操作。
今天,我們將深入探討一個(gè)具體問題:
如何根據(jù)需要列出特定目錄下的所有文件名?
我將介紹5種用Python實(shí)現(xiàn)的方法。不同的方法適用于不同的使用場(chǎng)景。
2. 使用os.listdir()
使用Python中的os模塊下的方法listdir()是一個(gè)不錯(cuò)的選擇,樣例如下:
>>> import os >>> os.listdir()
上面的代碼將打印當(dāng)前路徑下所有文件和目錄的名稱。
如果我們想基于特定路徑來打印結(jié)果,只需傳遞給函數(shù)os.listdir() 相應(yīng)的參數(shù),舉例如下:
>>> os.listdir(myPath)
如果我們只想打印所有文件不包含目錄,那么我們可以使用os.path.isfile() 來進(jìn)行相應(yīng)的過濾,如下:
>>> import os >>> files = [f for f in os.listdir() if os.path.isfile(f)]
當(dāng)然,對(duì)于目錄,同樣可以使用函數(shù)os.path.isdir() 進(jìn)行過濾,代碼如下:
import os files = [f for f in os.listdir() if os.path.isdir(f)]
如果我們只需要特定類型的文件怎么辦?
完全不用擔(dān)心。Python為復(fù)雜場(chǎng)景提供了更多選擇。
3. 使用os.walk()
os模塊中還有另一個(gè)方法 os.walk() 。顧名思義,它可以一層一層地“遍歷”目錄樹。當(dāng)我們調(diào)用os.walk() 函數(shù)時(shí),它將返回一個(gè)生成器。此時(shí)每次調(diào)用next() 方法生成下一個(gè)值時(shí),它都會(huì)進(jìn)入到一個(gè)layer ,結(jié)果是一個(gè)包含3個(gè)項(xiàng)的元組:(dirpath、dirname、filename) 。
舉例,如果要獲取第二層中所有文件夾的名稱,代碼如下所示:
from os import walk
f = []
layer = 1
w = walk("/Users/zhao")
for (dirpath, dirnames, filenames) in w:
? ? if layer == 2:
? ? ? ? f.extend(dirnames)
? ? ? ? break
? ? layer += 14. 在Glob模塊中使用正則表達(dá)式
有時(shí)我們不想獲取所有文件的名稱,而是希望精確獲取特定類型文件的名稱。
由于glob模塊能夠添加用于搜索的正則表達(dá)式,因此它將是我們進(jìn)行此類操作的首選。
>>> import glob
>>> glob.glob("/sys/*.log")
上面的代碼將列出以log 結(jié)尾的文件名。
5. 使用pathlib
從Python 3.4開始,有一個(gè)名為pathlib 的模塊也很有用。
借助列表生成式的技巧,我們只需使用一行代碼即可生成當(dāng)前路徑的所有文件名:
import pathlib files = [f for f in pathlib.Path().iterdir() if f.is_file()]
令人奇怪的是,Path() 還附帶了glob() 函數(shù)。(無(wú)需在Python文件頂部顯式導(dǎo)入glob模塊)
import pathlib
files = [f for f in pathlib.Path().glob("/sys/*.log")]6. 使用os.scandir()
經(jīng)典的os.listdir() 函數(shù)很直觀,但對(duì)于包含大量文件的大型目錄來說效率并不高。因此,Python 3.5引入了一個(gè)新的功能類似的函數(shù)os.scandir() 。
是的,有的同學(xué)可能已經(jīng)猜到了。此函數(shù)將返回一個(gè)生成器,并不是所有名稱的列表。在某些情況下,我們并不需要同時(shí)獲取所有名稱,此時(shí)會(huì)更有效。
>>> a=os.scandir() >>> next(a) <DirEntry 'test1.py'> >>> next(a) <DirEntry 'test2.py'>
7. 總結(jié)
本文重點(diǎn)介紹了在Python中如何列出目錄中的文件的五種方法,并針對(duì)每種方法給出了相應(yīng)的代碼樣例。
到此這篇關(guān)于Python中列出目錄中的文件的五種方法小結(jié)的文章就介紹到這了,更多相關(guān)Python 列出目錄文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3 用matplotlib繪制sigmoid函數(shù)的案例
這篇文章主要介紹了Python3 用matplotlib繪制sigmoid函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
如何通過Python實(shí)現(xiàn)標(biāo)簽云算法
這篇文章主要介紹了如何通過Python實(shí)現(xiàn)標(biāo)簽云算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
如何在sae中設(shè)置django,讓sae的工作環(huán)境跟本地python環(huán)境一致
這篇文章主要介紹了如何在sae中設(shè)置django,讓sae的工作環(huán)境跟本地python環(huán)境一致,需要的朋友可以參考下2017-11-11
Python3顯示當(dāng)前時(shí)間、計(jì)算時(shí)間差及時(shí)間加減法示例代碼
這篇文章主要給大家介紹了關(guān)于Python3顯示當(dāng)前時(shí)間、計(jì)算時(shí)間差及時(shí)間加減法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本
微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?隨著使用時(shí)間的增長(zhǎng),我們的微信好友列表可能會(huì)變得越來越臃腫,所以本文為大家準(zhǔn)備了通過標(biāo)簽清理微信好友的Python自動(dòng)化腳本,希望對(duì)大家有所幫助2024-12-12
Python Pandas數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單介紹
這篇文章主要介紹了Python Pandas數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單介紹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

