Python?os?模塊與路徑從基礎(chǔ)到實(shí)戰(zhàn)應(yīng)用
在 Python 開(kāi)發(fā)中,文件和目錄的操作是必不可少的技能。無(wú)論是數(shù)據(jù)處理、日志記錄還是程序配置,都需要與文件系統(tǒng)交互。Python 的os模塊和os.path子模塊提供了豐富的接口,能夠輕松實(shí)現(xiàn)目錄創(chuàng)建、文件刪除、路徑處理等功能。本文將結(jié)合實(shí)例代碼,詳細(xì)講解這些模塊的核心用法。
一、路徑基礎(chǔ):理解路徑表示方式
在開(kāi)始操作文件系統(tǒng)前,首先需要掌握路徑的表示方法:
./:表示當(dāng)前目錄(即運(yùn)行腳本所在的目錄)../:表示上一級(jí)目錄- 不同操作系統(tǒng)的路徑分隔符不同(Windows 用
\,Linux/macOS 用/),可通過(guò)os.sep獲取當(dāng)前系統(tǒng)的分隔符
二、os 模塊核心功能:目錄與文件操作
os模塊提供了直接與操作系統(tǒng)交互的功能,涵蓋目錄創(chuàng)建、查看、刪除等常用操作。
1. 獲取當(dāng)前工作目錄與路徑分隔符
import os # 獲取當(dāng)前工作目錄(絕對(duì)路徑) print(os.getcwd()) # 示例輸出:C:\project\demo # 獲取當(dāng)前系統(tǒng)的路徑分隔符(Windows為\,Linux/macOS為/) print(os.sep) # 示例輸出:\(Windows系統(tǒng))
2. 目錄創(chuàng)建:os.makedirs()
os.makedirs()支持遞歸創(chuàng)建目錄(即同時(shí)創(chuàng)建多級(jí)目錄),無(wú)需手動(dòng)逐級(jí)創(chuàng)建父目錄。
# 遞歸創(chuàng)建單級(jí)子目錄
os.makedirs('./data/sub3') # 在當(dāng)前目錄創(chuàng)建data目錄,再在其中創(chuàng)建sub3目錄
# 遞歸創(chuàng)建多級(jí)子目錄
os.makedirs('./data/b3/c5') # 創(chuàng)建data/b3/c5三級(jí)目錄注意:如果目錄已存在,再次調(diào)用會(huì)報(bào)錯(cuò)??商砑?code>exist_ok=True參數(shù)避免錯(cuò)誤:
os.makedirs('./data/sub3', exist_ok=True) # 目錄存在時(shí)不報(bào)錯(cuò)3. 目錄查看:os.listdir()與os.walk()
(1)os.listdir():查看單層目錄
返回指定目錄下的所有子目錄和文件(僅顯示一級(jí),不遞歸)。
# 查看./data目錄下的內(nèi)容
print(os.listdir('./data'))
# 示例輸出:['sub3', 'b3'](假設(shè)data目錄下有這兩個(gè)子目錄)(2)os.walk():遞歸遍歷目錄
os.walk()是一個(gè)生成器,可遞歸遍歷目錄樹(shù),返回每個(gè)目錄的三元組(當(dāng)前目錄路徑, 子目錄列表, 文件列表)。
# 遞歸遍歷./data目錄
gen = os.walk('./data')
# 第一次調(diào)用next():返回當(dāng)前目錄(data)的信息
print(next(gen))
# 示例輸出:('./data', ['sub3', 'b3'], [])
# 第二次調(diào)用next():返回第一個(gè)子目錄(sub3)的信息
print(next(gen))
# 示例輸出:('./data/sub3', [], [])
# 第三次調(diào)用next():返回第二個(gè)子目錄(b3)的信息
print(next(gen))
# 示例輸出:('./data/b3', ['c5'], [])實(shí)戰(zhàn):收集目錄下所有文件名稱
# 初始化文件列表
all_files = []
# 遍歷所有目錄,收集文件
for root, dirs, files in os.walk('./data'):
all_files.extend(files) # 將當(dāng)前目錄的文件添加到列表
print(all_files) # 輸出所有文件名稱(如['111.py', '6.py'])4. 目錄與文件刪除
(1)刪除文件:os.remove()
# 先判斷文件是否存在,避免報(bào)錯(cuò)
if os.path.exists('data/b3/c5/111.py'):
os.remove('data/b3/c5/111.py') # 刪除指定文件(2)刪除空目錄:os.rmdir()與os.removedirs()
os.rmdir():僅刪除空的葉子目錄(目錄內(nèi)無(wú)文件和子目錄)。os.removedirs():遞歸刪除空目錄(從最深層開(kāi)始,直到遇到非空目錄為止)。
# 刪除葉子目錄(必須為空)
if os.path.exists('data/sub3/cc'):
os.rmdir('data/sub3/cc')
# 遞歸刪除空目錄(如刪除c5后,若b3為空則繼續(xù)刪除b3)
if os.path.exists('data/b3/c5'):
os.removedirs('data/b3/c5')注意:如果目錄非空(包含文件或子目錄),刪除會(huì)報(bào)錯(cuò)。刪除非空目錄需使用shutil.rmtree()(需導(dǎo)入shutil模塊)。
三、os.path 模塊:路徑處理工具
os.path模塊提供了一系列路徑處理函數(shù),解決不同操作系統(tǒng)路徑格式差異的問(wèn)題,確保路徑操作跨平臺(tái)兼容。
1. 判斷路徑類型
os.path.isdir(path):判斷是否為目錄。os.path.isfile(path):判斷是否為文件。
import os.path
# 判斷是否為目錄
print(os.path.isdir('./data/sub3/test')) # 輸出:False(假設(shè)test不存在)
# 判斷是否為文件
print(os.path.isfile('./data/sub3/6.py')) # 輸出:True(假設(shè)文件存在)2. 獲取文件大小
os.path.getsize(path)返回文件的大?。▎挝唬鹤止?jié))。
# 獲取文件大小
print(os.path.getsize('./data/sub3/6.py')) # 示例輸出:1024(表示1024字節(jié))3. 路徑分割與拼接
os.path.split(path):將路徑分割為(目錄部分, 文件名)。os.path.join(path1, path2, ...):拼接多個(gè)路徑片段,自動(dòng)使用當(dāng)前系統(tǒng)的分隔符。
# 分割路徑
print(os.path.split('./data/sub3/6.py'))
# 輸出:('./data/sub3', '6.py')
# 拼接路徑
print(os.path.join(r'.\data\sub3', '6.py'))
# 輸出:.\data\sub3\6.py(Windows系統(tǒng))
# 或 ./data/sub3/6.py(Linux/macOS系統(tǒng))優(yōu)勢(shì):os.path.join()會(huì)自動(dòng)適配系統(tǒng)分隔符,避免手動(dòng)寫死/或\導(dǎo)致的跨平臺(tái)問(wèn)題。
四、實(shí)戰(zhàn)場(chǎng)景與最佳實(shí)踐
- 常見(jiàn)應(yīng)用場(chǎng)景:
- 日志文件管理:創(chuàng)建按日期分類的日志目錄(如
./logs/2025-07)。 - 數(shù)據(jù)備份:遍歷指定目錄,復(fù)制或壓縮所有文件。
- 程序初始化:?jiǎn)?dòng)時(shí)創(chuàng)建必要的配置目錄(如
./config、./cache)。
- 日志文件管理:創(chuàng)建按日期分類的日志目錄(如
- 最佳實(shí)踐:
- 路徑操作優(yōu)先使用
os.path模塊,避免硬編碼分隔符(如/或\)。 - 刪除文件 / 目錄前務(wù)必檢查是否存在(用
os.path.exists()),避免報(bào)錯(cuò)。 - 遞歸遍歷目錄時(shí),使用
os.walk()的生成器特性,減少內(nèi)存占用。 - 處理大型目錄時(shí),結(jié)合
try-except捕獲權(quán)限不足等異常:
- 路徑操作優(yōu)先使用
try:
os.makedirs('./data/sub3')
except PermissionError:
print("無(wú)權(quán)限創(chuàng)建目錄")五、總結(jié)
os和os.path模塊是 Python 文件系統(tǒng)操作的核心工具,通過(guò)本文的學(xué)習(xí),你已掌握:
- 目錄的創(chuàng)建、查看、刪除(
os.makedirs()、os.walk()、os.remove()等)。 - 路徑的判斷、分割、拼接(
os.path.isdir()、os.path.join()等)。 - 跨平臺(tái)路徑處理的最佳實(shí)踐。
到此這篇關(guān)于Python os 模塊與路徑從基礎(chǔ)到實(shí)戰(zhàn)應(yīng)用的文章就介紹到這了,更多相關(guān)python os模塊路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python爬蟲(chóng)實(shí)現(xiàn)獲取下一頁(yè)代碼
在本篇文章里小編給大家整理了關(guān)于python爬蟲(chóng)實(shí)現(xiàn)獲取下一頁(yè)代碼內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。2020-03-03
Python代碼實(shí)現(xiàn)為PDF添加頁(yè)碼(附詳細(xì)教程)
在處理合同、報(bào)告、論文、技術(shù)文檔等 PDF 時(shí),給頁(yè)面添加頁(yè)碼幾乎是必備功能,本文將介紹如何使用 Spire.PDF for Python 這個(gè)強(qiáng)大的庫(kù),通過(guò)簡(jiǎn)單的代碼為 PDF 文件自動(dòng)添加 中文頁(yè)碼 ,希望對(duì)大家有所幫助2026-05-05
新手常犯的10個(gè)Python錯(cuò)誤及解決方法總結(jié)
在學(xué)習(xí) Python 的過(guò)程中,新手開(kāi)發(fā)者經(jīng)常會(huì)遇到一些常見(jiàn)的錯(cuò)誤,今天,就讓我們一起看看這些常見(jiàn)錯(cuò)誤及其解決方法,幫助你更快地掌握 Python 編程2025-10-10
python利用元類和描述器實(shí)現(xiàn)ORM模型的詳細(xì)步驟
Python中的類與數(shù)據(jù)庫(kù)之間的映射,對(duì)數(shù)據(jù)的操作就不用編寫SQL語(yǔ)言了,因?yàn)槎挤庋b好了,比如你想插入一條數(shù)據(jù),你就直接創(chuàng)建一個(gè)對(duì)象即可,下面通過(guò)本文學(xué)習(xí)下python利用元類和描述器實(shí)現(xiàn)ORM模型的詳細(xì)步驟,感興趣的朋友一起看看吧2021-11-11
python中實(shí)現(xiàn)php的var_dump函數(shù)功能
這篇文章主要介紹了python中實(shí)現(xiàn)php的var_dump函數(shù)功能,var_dump函數(shù)在PHP中調(diào)試時(shí)非常實(shí)用,本文介紹在Python中實(shí)現(xiàn)這個(gè)函數(shù),需要的朋友可以參考下2015-01-01

