【用 Python 輕鬆取得檔案名稱】os.path.basename() 的用法與相關函式完整解析

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() 類似,但風格上更符合物件導向的寫法。

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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 的搭配使用等。以下是幾點建議:

  1. 為了跨平台支援,建議使用 os.path.join()pathlib.Path() 來處理路徑
  2. 在操作檔案前,使用 os.path.exists()os.path.isfile() 確認檔案是否存在

7. 總結

os.path.basename() 是一個在 Python 中非常實用的函式,可以快速從檔案路徑中取得檔案名稱。在本文中,我們從 basename() 的基本用法,到相關函式與 pathlib 的比較都做了詳細介紹。

  • 從檔案名稱的提取跨平台支援,你應該已經了解這個函式在多種情境下的實用性。
  • 下一步,可以進一步探索其他 os.path 的函式,或考慮在新專案中使用更現代化的 pathlib,讓你的檔案處理工作更加順暢。