HOWTO · Python
如何在 Python 中從路徑獲取檔名
本教學將示範在 Python 中從檔案路徑提取檔名的不同方法,包括 os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。
本頁內容
在程式設計中,我們經常需要從給定的檔案路徑中提取檔名。設想這樣一個場景:我們有一個檔案路徑,例如 C:\Documents\Project\file.txt,需要從中只提取檔名,即 file.txt。這是檔案管理、資料分析和 Web 開發中的日常任務,Python 提供了幾種完成它的方法。
本教學介紹在 Python 中從路徑獲取檔名的四種方法:os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。它們的主要區別在於除了檔名之外還能提供什麼,以及如何處理為與程式碼執行環境不同的作業系統編寫的路徑。
使用 os.path.split() 函數在 Python 中從路徑獲取檔名
os.path.split() 函數將檔案路徑拆分為目錄和檔名兩部分,這樣你就可以只取檔名部分——如果你還需要目錄,也可以把兩部分都保留下來。
語法:
import os
directory, filename = os.path.split(path)
參數:os.path.split() 函數接受單個參數。
path:該參數表示要從中提取檔名的檔案路徑。它可以是包含檔案絕對路徑或相對路徑的字串。
回傳值:該函數回傳一個包含兩個元素的元組。
-
directory:該變數保存路徑的目錄部分,不包括檔名。 -
filename:該變數包含從路徑中提取的檔名。
下面的程式碼片段示範了如何使用 os.path.split() 函數在 Python 中從路徑獲取檔名。
import os
directory, filename = os.path.split("MyFolder/MySubFolder/MyFile.txt")
print(directory)
print(filename)
輸出:
MyFolder/MySubFolder
MyFile.txt
變數 directory 保存著 MyFolder/MySubFolder,即檔案路徑的目錄部分;變數 filename 保存著 MyFile.txt,即提取出的檔名。當你兩個部分都需要時使用這個方法;如果只需要檔名,下一個方法更短。
使用 os.path.basename() 函數在 Python 中從路徑獲取檔名
os.path.basename() 函數回傳路徑的最後一個組成部分,通常就是檔名。它是 os.path 模組的一部分,其分隔符規則遵循程式碼執行所在的作業系統。
語法:
import os
filename = os.path.basename(path)
參數:os.path.basename() 函數接受單個參數。
path:該參數表示要從中提取檔名的檔案路徑。它可以是包含檔案絕對路徑或相對路徑的字串。
回傳值:該函數回傳一個字串,表示從給定路徑中提取的檔名。
os.path.basename() 和 os.path.split() 都能從路徑中提取檔名,但 os.path.basename() 只關注檔名部分並將其作為字串回傳,因此當你不需要目錄部分時,它是更直接的選擇。
import os
filename = os.path.basename("MyFolder/MySubFolder/MyFile.txt")
print(filename)
輸出:
MyFile.txt
結果即檔名 MyFile.txt 被賦給變數 filename 並印出來。
使用 ntpath 函式庫在 Python 中從路徑獲取檔名
Python 的 ntpath 模組實作了針對 Windows 路徑的路徑操作,無論你的程式碼實際執行在什麼系統上。當你必須在 Linux 或 macOS 機器上處理 Windows 風格的路徑時,這一點很重要:在這類系統上,os.path.basename() 不把反斜線當作分隔符,因此 os.path.basename("MyFolder\\MySubFolder\\MyFile.txt") 會回傳整個字串,而 ntpath.basename() 回傳檔名。
語法:
import ntpath
filename = ntpath.basename(path)
參數:ntpath.basename() 函數接受單個參數。
path:該參數表示要從中提取檔名的檔案路徑。它可以是包含檔案絕對路徑或相對路徑的字串。
回傳值:該函數回傳一個字串,表示從給定路徑中提取的檔名。
下面的程式碼片段示範了如何使用 ntpath.basename() 函數在 Python 中從 Windows 路徑獲取檔名。
import ntpath
filename = ntpath.basename("MyFolder\\MySubFolder\\MyFile.txt")
print(filename)
輸出:
MyFile.txt
當你處理的路徑是 Windows 路徑、但程式碼可能在任何系統上執行時,使用 ntpath;在 Windows 機器上,os.path 本來就遵循同樣的規則,兩者表現一致。
使用 pathlib 模組在 Python 中從路徑獲取檔名
pathlib 模組為處理檔案路徑提供了物件導向的方法。它的 Path 類別封裝了與路徑相關的操作,檔名可以直接透過 Path 物件的 .name 屬性獲得。
from pathlib import Path
filename = Path("MyFolder/MySubFolder/MyFile.txt").name
print(filename)
輸出:
MyFile.txt
除了 .name,同一個物件還能給出父目錄(.parent)、副檔名(.suffix)和不帶副檔名的檔名(.stem),因此當你需要的不只是檔名時,pathlib 是方便的選擇。
結論
我們探討了在 Python 中從檔案路徑提取檔名的 4 種不同方法:os.path.split()、os.path.basename()、ntpath.basename() 和 pathlib.Path.name。每種方法都有其優缺點,適用於不同的場景。
os.path.split() 方法可以將路徑拆分為目錄和檔名兩部分。這種細粒度讓你能更好地控制路徑,但僅存取檔名需要額外的程式碼。不過,它可以在不同的作業系統上工作,用途廣泛。
另一方面,os.path.basename() 提供了更簡單的方法,直接從路徑中提取檔名。它相容各種平台,提供了直接明瞭的解決方案。但是,它只以字串形式回傳檔名。
對於 Windows 特定的路徑,ntpath.basename() 旨在在任何作業系統上處理這些路徑。它無需額外的程式碼即可直接提取檔名。但是,它僅限於 Windows 路徑,缺乏跨平台相容性。
最後,pathlib.Path.name 為處理路徑提供了物件導向的方法。它允許進一步的路徑操作,並與其他 pathlib 功能很好地整合。但是,它為簡單的檔名提取引入了一些複雜性,並且需要匯入 pathlib 模組。