一文深入學(xué)習(xí)Python中的os.listdir函數(shù)
1. 引言
在Python中,文件和目錄操作是常見的任務(wù)之一。而os.listdir()函數(shù)是Python中用于獲取指定目錄下所有文件和子目錄的函數(shù)之一。本篇博客將深入探索os.listdir()函數(shù)的用法和注意事項。
2. os模塊簡介
Python的os模塊是與操作系統(tǒng)交互的一個接口,提供了許多與文件和目錄操作相關(guān)的函數(shù)。通過os模塊,我們可以執(zhí)行文件和目錄的創(chuàng)建、刪除、重命名等操作。os.listdir()函數(shù)是os模塊中的一個重要函數(shù),用于獲取指定目錄下的所有文件和子目錄。
3. os.listdir函數(shù)的基本用法
os.listdir()函數(shù)的基本語法如下:
import os file_list = os.listdir(path)
其中,path為要獲取文件和子目錄列表的目錄路徑。如果不提供path參數(shù),則默認(rèn)為當(dāng)前工作目錄。該函數(shù)會返回一個包含指定目錄下所有文件和子目錄名稱的列表。
下面是一個示例代碼,演示了如何使用os.listdir()函數(shù)獲取當(dāng)前目錄下的所有文件和子目錄:
import os
file_list = os.listdir()
for file in file_list:
print(file)
4. 獲取指定目錄下的文件和子目錄
如果我們想要獲取指定目錄下的文件和子目錄,可以將目錄路徑作為path參數(shù)傳遞給os.listdir()函數(shù)。
下面是一個示例代碼,演示了如何使用os.listdir()函數(shù)獲取指定目錄下的所有文件和子目錄:
import os
path = '/path/to/directory'
file_list = os.listdir(path)
for file in file_list:
print(file)5. 遍歷目錄樹
有時候,我們需要遍歷整個目錄樹,即獲取指定目錄及其子目錄下的所有文件和子目錄??梢允褂眠f歸的方法來實現(xiàn)這個功能。
下面是一個示例代碼,演示了如何使用os.listdir()函數(shù)遞歸遍歷目錄樹:
import os
def list_files(path):
file_list = os.listdir(path)
for file in file_list:
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_files(file_path)
else:
print(file_path)
path = '/path/to/directory'
list_files(path)6. 處理隱藏文件和特殊文件
有些情況下,我們可能需要處理隱藏文件和特殊文件,例如符號鏈接等??梢允褂?code>os.listdir()函數(shù)結(jié)合其他函數(shù)來實現(xiàn)對隱藏文件和特殊文件的處理。
下面是一個示例代碼,演示了如何使用os.listdir()函數(shù)過濾隱藏文件和特殊文件:
import os
def list_files(path):
file_list = os.listdir(path)
for file in file_list:
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_files(file_path)
elif not file.startswith('.'): # 過濾隱藏文件
print(file_path)
path = '/path/to/directory'
list_files(path)7. 錯誤處理和異常情況
在使用os.listdir()函數(shù)時,可能會遇到一些錯誤和異常情況。例如,如果指定的路徑不存在或不是一個目錄,os.listdir()函數(shù)將會拋出一個FileNotFoundError異常。
為了處理這些錯誤和異常,我們可以使用try-except語句來捕獲并處理異常。
下面是一個示例代碼,演示了如何處理FileNotFoundError異常:
import os
def list_files(path):
try:
file_list = os.listdir(path)
for file in file_list:
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
list_files(file_path)
else:
print(file_path)
except FileNotFoundError:
print(f"Directory '{path}' does not exist.")
path = '/path/to/nonexistent_directory'
list_files(path)8. os.scandir函數(shù)的替代選擇
在Python 3.5及以上版本中,引入了os.scandir()函數(shù),該函數(shù)相比于os.listdir()函數(shù)具有一些優(yōu)勢。os.scandir()函數(shù)返回一個迭代器,可以更高效地遍歷目錄并獲取文件和子目錄的詳細(xì)信息。
下面是一個示例代碼,演示了如何使用os.scandir()函數(shù)獲取指定目錄下的所有文件和子目錄:
import os
def list_files(path):
with os.scandir(path) as entries:
for entry in entries:
if entry.is_file():
print(entry.name)
path = '/path/to/directory'
list_files(path)9. 總結(jié)
在本篇博客中,我們深入探索了Python中的os.listdir()函數(shù)。我們了解了該函數(shù)的基本用法和參數(shù),以及如何獲取指定目錄下的文件和子目錄,遍歷目錄樹,處理隱藏文件和特殊文件,以及錯誤處理和異常情況。此外,我們還介紹了Python 3.5引入的os.scandir()函數(shù),作為os.listdir()的替代選擇。
os.listdir()函數(shù)在文件和目錄操作中非常有用,可以幫助我們快速獲取指定目錄下的所有文件和子目錄。然而,在使用該函數(shù)時,需要注意錯誤處理和異常情況,并根據(jù)實際需求選擇合適的函數(shù)。
10. 參考文獻(xiàn)
- Python官方文檔:os.listdir()
- Python官方文檔:os.scandir()
附:排序問題
當(dāng)我們用os.listdir()打開文件時:

發(fā)現(xiàn)返回的是這樣的
['1.jpg', '10.jpg', '11.jpg', '12.jpg', '2.jpg', '20.jpg', '21.jpg', '22.jpg']
是按照采取了按字符鍵值排序的手段,所以10.jpg排在了前面。
解決辦法:
返回的值都是數(shù)列了
可以按照自己的想法來進(jìn)行“sort”排序
1.數(shù)字大小排序
按照“.”之前的數(shù)字大小排序
import os
path = r"test"
filenames=os.listdir(path)
filenames.sort(key=lambda x:int(x.split('.')[0]))
print(filenames)得到
['1.jpg', '2.jpg', '10.jpg', '11.jpg', '12.jpg', '20.jpg', '21.jpg', '22.jpg']
2.在指定長度數(shù)字
某些文件包含字母或漢字
指定某幾個位置的數(shù)字經(jīng)行“sort”

import os path = r"test" filenames=os.listdir(path) filenames.sort(key=lambda x:int(x[5:-4])) print(filenames)
['屏幕截圖 1.png', '屏幕截圖 2.png', '屏幕截圖 10.png', '屏幕截圖 11.png', '屏幕截圖 19.png', '屏幕截圖 20.png']
要看看你的非數(shù)字字符的位置,來判斷取值范圍
到此這篇關(guān)于Python中os.listdir函數(shù)的文章就介紹到這了,更多相關(guān)Python os.listdir函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Python下的Matlab函數(shù)對應(yīng)關(guān)系(Numpy)
這篇文章主要介紹了關(guān)于Python下的Matlab函數(shù)對應(yīng)關(guān)系(Numpy),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
python訓(xùn)練數(shù)據(jù)時打亂訓(xùn)練數(shù)據(jù)與標(biāo)簽的兩種方法小結(jié)
今天小編就為大家分享一篇python訓(xùn)練數(shù)據(jù)時打亂訓(xùn)練數(shù)據(jù)與標(biāo)簽的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python筆記之a(chǎn) = [0]*x格式的含義及說明
這篇文章主要介紹了Python筆記之a(chǎn) = [0]*x格式的含義及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

