1. 什麼是 os.path.basename()?
Python 的 os.path.basename()
是一個可以從指定的檔案路徑中取得「檔案名稱」部分的函式。舉例來說,如果提供「/home/user/documents/file.txt」這樣的路徑,os.path.basename()
會回傳「file.txt」。這個函式具有跨平台的特性,可以在不同作業系統上使用,非常適合用於各種檔案處理的場景。
os.path.basename() 的概覽
os.path.basename() 是 os
模組中的一個函式,用來取得檔案路徑中的最後一個元素(通常是檔案名稱)。當你想取得完整路徑中的檔案名稱時,這個函式非常實用。
基本使用範例
import os
file_path = "/home/user/documents/report.pdf"
file_name = os.path.basename(file_path)
print(file_name) # 輸出: report.pdf
這段程式碼會從指定的路徑中取出「report.pdf」這個檔案名稱。無論是 Python 初學者還是專業開發者,都經常會用到這個功能。
2. 如何使用 os.path.basename()
接下來,我們將介紹實際使用 os.path.basename()
的方式,以及常見的使用情境。
從檔案路徑取得檔案名稱的方法
當你將完整路徑傳入 os.path.basename()
時,會回傳路徑最後的檔案名稱。由於包含副檔名,所以可以直接顯示檔名,或用於其他處理流程中。
範例程式碼
import os
file_path = "/home/user/documents/report.pdf"
file_name = os.path.basename(file_path)
print(file_name) # 輸出: report.pdf
從資料夾路徑取得資料夾名稱的方法
如果傳入的是資料夾路徑而不是檔案路徑,os.path.basename()
會回傳該路徑中最後一層的資料夾名稱。以下範例會從「/home/user/documents/」中回傳「documents」。
範例程式碼
import os
dir_path = "/home/user/documents/"
directory_name = os.path.basename(dir_path)
print(directory_name) # 輸出: documents
包含副檔名的檔案名稱取得
os.path.basename()
回傳的檔案名稱會包含副檔名。你不需要額外確認副檔名的存在,就可以輕鬆取得完整的檔名,非常簡潔實用。
範例程式碼
import os
file_path = "/path/to/data/file.csv"
file_name_with_extension = os.path.basename(file_path)
print(file_name_with_extension) # 輸出: file.csv

3. 認識 os.path.basename() 與其他相關函式的差異
os.path
模組中除了 basename()
外,還有其他用於處理路徑的實用函式。以下我們將 basename()
與常用的 os.path.dirname()
、os.path.split()
、os.path.splitext()
做比較說明。
與 os.path.dirname() 的差異
os.path.dirname()
是用來取得資料夾路徑;而os.path.basename()
則是用來取得檔案名稱。
與 os.path.split() 的差異
os.path.split()
可以同時取得資料夾路徑與檔案名稱。
與 os.path.splitext() 的搭配使用
- 使用
os.path.splitext()
可以輕鬆地從檔案名稱中去除副檔名。
4. 使用 pathlib 更簡單地取得檔案名稱
從 Python 3.4 開始,標準函式庫中加入了 pathlib
模組,專門用來處理檔案路徑。與 os.path
相比,pathlib
更加直觀,特別適合注重程式碼可讀性的專案使用。
如何使用 pathlib.Path.name
from pathlib import Path
file_path = Path("/home/user/documents/report.pdf")
print(file_path.name) # 輸出: report.pdf
透過 pathlib.Path.name
,可以非常簡單地取得檔案名稱,功能上與 basename()
類似,但風格上更符合物件導向的寫法。

5. 實際使用範例
讓我們透過以下範例,看看 os.path.basename()
在實際專案中是如何被應用的。
重新命名檔案
import os
directory = "/path/to/files"
new_prefix = "new_file"
for index, filename in enumerate(os.listdir(directory)):
old_file = os.path.join(directory, filename)
if os.path.isfile(old_file):
new_file_name = f"{new_prefix}_{index}{os.path.splitext(filename)[1]}"
new_file = os.path.join(directory, new_file_name)
os.rename(old_file, new_file)
6. 注意事項與最佳實踐
在使用 os.path.basename()
時,有幾個需要特別注意的地方,尤其是不同作業系統中的路徑分隔符不同,以及與 pathlib
的搭配使用等。以下是幾點建議:
- 為了跨平台支援,建議使用
os.path.join()
或pathlib.Path()
來處理路徑 - 在操作檔案前,使用
os.path.exists()
或os.path.isfile()
確認檔案是否存在
7. 總結
os.path.basename()
是一個在 Python 中非常實用的函式,可以快速從檔案路徑中取得檔案名稱。在本文中,我們從 basename()
的基本用法,到相關函式與 pathlib
的比較都做了詳細介紹。
- 從檔案名稱的提取 到 跨平台支援,你應該已經了解這個函式在多種情境下的實用性。
- 下一步,可以進一步探索其他
os.path
的函式,或考慮在新專案中使用更現代化的pathlib
,讓你的檔案處理工作更加順暢。