Python獲取文件夾下的所有文件路徑小結(jié)
在Python編程過(guò)程中,我們常常有這樣的需求,需要獲取某一個(gè)文件目錄下的所有文件,或獲取文件目錄下的所有指定后綴名的文件,亦或要求獲取該文件所在的文件夾,還有可能需要替換文件名,刪除文件夾。針對(duì)這些問(wèn)題,本文系統(tǒng)總結(jié)了這些方法,以供大家參考。
本實(shí)例的文件夾放置在桌面,路徑為:C:\Users\Smile\Desktop\周匯報(bào),該文件夾下有個(gè)子文件夾,子文件夾有一個(gè)pdf文件。
1、獲取文件夾下的所有文件路徑
這里推薦使用os模塊下的listdir方法,該方法可以獲取該文件夾下的所有文件名稱(chēng)(包含子文件夾名稱(chēng)),之后配合os.path.join方法來(lái)獲取該文件夾下的所有文件路徑。
import os dir_path = r'C:\Users\Smile\Desktop\周匯報(bào)' file_ls = os.listdir(dir_path) #獲取所有文件名稱(chēng) file_ls
運(yùn)行結(jié)果如下:
我們可以發(fā)現(xiàn),結(jié)果不僅包括了文件名,還包括了子文件夾名。
獲取完整路徑,在上面基礎(chǔ)上使用1行代碼即可:
file_ls = [os.path.join(dir_path, file) for file in file_ls] file_ls
如上圖可以發(fā)現(xiàn)獲取了指定文件夾下的所有文件路徑,還包括了子文件夾路徑。但是如果我們想要連帶獲取子文件夾下的文件名該如何操作?
解決方案就是通過(guò)os.walk方法進(jìn)行。它返回3個(gè)參數(shù)——根目錄、根目錄下的所有文件、根目錄下的子文件夾。它的神奇之處在于獲取根目錄子文件夾后會(huì)繼續(xù)循環(huán),依次取出根目錄下子文件夾下的文件。
path = r'C:\Users\Smile\Desktop\周匯報(bào)' for root, dirs, files in os.walk(path): print(root)
運(yùn)行的結(jié)果為:
C:\Users\Smile\Desktop\周匯報(bào)
C:\Users\Smile\Desktop\周匯報(bào)\數(shù)據(jù)
可以發(fā)現(xiàn)在實(shí)驗(yàn)中循環(huán)了兩次,這里指定輸出當(dāng)前循環(huán)的根目錄,第一次循環(huán)遍歷了根目錄下的文件,由于該根目錄下存在子文件夾,所以又循環(huán)了一次以獲取子文件夾下的文件,所以第二次循環(huán)輸出的根目錄為子文件夾的位置。
對(duì)此,我們可以確定,如果在循環(huán)外面指定一個(gè)空列表。在每一次循環(huán)時(shí)將文件名與根目錄進(jìn)行拼接并添加到空列表中,就可以得到根目錄下所有的文件路徑。
path = r'C:\Users\Smile\Desktop\周匯報(bào)' file_ls = [] for root, dirs, files in os.walk(path): root_file_ls = [os.path.join(root, file) for file in files] file_ls.append(root_file_ls) file_ls
結(jié)果如下:
結(jié)果中可以看到,位于子文件夾下的文件也被添加到文件路徑列表了。
2、獲取后綴名
這里可以使用os.path.splitext方法來(lái)分割路徑,它將路徑分為兩個(gè)部分,一個(gè)是后綴名,另一個(gè)是除后綴名之外的部分。
file = r'C:\\Users\\Smile\\Desktop\\周匯報(bào)\\第六周總結(jié)_20221024_20221030.pptx'``houzhui = os.path.splitext(file)[1]``houzhui`` ``--結(jié)果--``'.pptx'
3、獲取指定后綴名的文件
路徑的本質(zhì)是字符串,可以使用endswith方法來(lái)判斷路徑是否以某個(gè)字符結(jié)尾。現(xiàn)在將r’C:\Users\Smile\Desktop\周匯報(bào)’直接路徑下(不含子文件夾)的所有docx文件輸出。
path = r'C:\Users\Smile\Desktop\周匯報(bào)' file_ls = [] for root, dirs, files in os.walk(path): root_file_ls = [os.path.join(root, file) for file in files] file_ls.append(root_file_ls) #因?yàn)樯厦嫜h(huán)了兩次,第二次是子文件夾的文件,所以取出第1個(gè)元素 #使用endswith判斷是否以docx結(jié)尾 file_ls = [file for file in file_ls[0] if file.endswith('.docx')] file_ls
結(jié)果如下:
可以看出已經(jīng)將所有的docx文件輸出。
4、修改文件名
使用os.rename(old_name, new_name)來(lái)進(jìn)行。
例子我就不舉了,太累了~~~
不過(guò)要提醒一點(diǎn),old_name和new_name都是路徑。
5、刪除/移動(dòng)文件
刪除文件使用os.remove(路徑名)
移動(dòng)文件需要使用shuilt庫(kù),語(yǔ)法如下:
import shutil shutil.move(old_name, new_name)
6、獲取文件所在的文件夾
使用os.path.dirname(path)即可獲取
path = r'C:\\Users\\Smile\\Desktop\\周匯報(bào)\\第001周總結(jié)_20220919_20220925.docx' os.path.dirname(path)
--結(jié)果--
'C:\\\\Users\\\\Smile\\\\Desktop\\\\周匯報(bào)'
7、移除文件夾
1.如果使用os.remove(path),此時(shí)的文件夾必須是空文件夾,否則會(huì)報(bào)錯(cuò)。
2.如果是非空文件夾,使用shutil.rmtree(path)即可成功刪除。
對(duì)于文件路徑的操作主要有:文件路徑獲取、后綴名獲取、獲取指定后綴名文件、刪除/移動(dòng)文件、替換文件名、獲取文件所在的文件夾、移除文件夾。
到此這篇關(guān)于Python獲取文件夾下的所有文件路徑小結(jié)的文章就介紹到這了,更多相關(guān)Python獲取所有文件路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django settings.py配置文件的詳細(xì)介紹
本文主要介紹了django settings.py配置文件的詳細(xì)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04解決Jupyter Notebook “signal only works&nb
這篇文章主要介紹了解決Jupyter Notebook “signal only works in main thread“問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09django 基于中間件實(shí)現(xiàn)限制ip頻繁訪問(wèn)過(guò)程詳解
這篇文章主要介紹了django 基于中間件實(shí)現(xiàn)限制ip頻繁訪問(wèn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)經(jīng)典算法拓?fù)渑判?、字符串匹配算法和最小生成?shù)實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)經(jīng)典算法拓?fù)渑判?、字符串匹配算法和最小生成?shù)實(shí)例,拓?fù)渑判颉⒆址ヅ渌惴ê妥钚∩蓸?shù)是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們?cè)诮鉀Q各種實(shí)際問(wèn)題中具有重要的應(yīng)用價(jià)值,需要的朋友可以參考下2023-08-08Python機(jī)器學(xué)習(xí)庫(kù)之Scikit-learn基本用法詳解
Scikit-learn?是?Python?中最著名的機(jī)器學(xué)習(xí)庫(kù)之一,它提供了大量實(shí)用的機(jī)器學(xué)習(xí)算法以及相關(guān)的工具,可以方便我們進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析,在這篇文章中,我們將介紹?Scikit-learn?的基本使用,包括如何導(dǎo)入數(shù)據(jù)、預(yù)處理數(shù)據(jù)、選擇和訓(xùn)練模型,以及評(píng)估模型的性能2023-07-07使用python圖形模塊turtle庫(kù)繪制櫻花、玫瑰、圣誕樹(shù)代碼實(shí)例
這篇文章主要介紹了用python繪制櫻花、玫瑰、圣誕樹(shù)代碼實(shí)例,需要的朋友可以參考下2020-03-03python 去除二維數(shù)組/二維列表中的重復(fù)行方法
今天小編就為大家分享一篇python 去除二維數(shù)組/二維列表中的重復(fù)行方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01