Python 獲取檔案名稱的高效方法|深入解析 os 模組與 pathlib 模組

1. 前言

Python 在檔案操作方面非常靈活,可以用簡單的程式碼自動化許多工作。本文將介紹幾種使用 Python 來「獲取檔案名稱」的方法,並重點解釋標準函式庫中的 os 模組與 pathlib 模組。閱讀本文後,你將能夠高效管理目錄中的檔案,並撰寫腳本來獲取與篩選檔案名稱。

2. Python 獲取檔案名稱的基本方法

首先,從 Python 獲取檔案名稱的基本方法開始。可以使用 os.path.basename() 函式,從指定的路徑中提取檔案名稱。

2.1 os.path.basename() 的用法

os.path.basename() 是一個函式,可從完整路徑中提取檔案名稱。以下範例示範如何從檔案路徑中獲取檔案名稱:

import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # 結果: "file.txt"

2.2 使用 os.path.dirname() 獲取目錄名稱

同樣地,可以使用 os.path.dirname() 來從檔案路徑中獲取目錄名稱。這樣可以將檔案名稱與目錄名稱分開處理。

dir_name = os.path.dirname(file_path)
print(dir_name)  # 結果: "/user/home/document"

 

3. 獲取目錄內的所有檔案名稱

如果要以清單(list)的形式獲取某個目錄內的所有檔案和資料夾,可以使用 os.listdir()。此外,如果需要遞迴地獲取子目錄內的檔案,則可以使用 os.walk()

3.1 使用 os.listdir() 獲取檔案名稱

os.listdir() 可用來獲取指定目錄內的所有檔案與資料夾,非常適合基本的目錄操作。

import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # 結果: ["file1.txt", "file2.txt", "subfolder"]

3.2 使用 os.walk() 遞迴獲取檔案名稱

如果需要包含子目錄內的所有檔案,可以使用 os.walk()。以下範例將列出指定目錄及其所有子目錄中的檔案。

import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 加入錯誤處理

如果目錄不存在或沒有存取權限,則可能會發生錯誤。因此,建議使用 try-except 來進行例外處理。

dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"{dir_path} 找不到該目錄。")

 

4. 獲取與修改副檔名

在獲取檔案名稱時,有時也需要處理副檔名(擴展名)。可以使用 os.path.splitext() 來分離或更改副檔名。

4.1 使用 os.path.splitext() 獲取副檔名

os.path.splitext() 是一個函式,可以將檔案名稱與副檔名分開。

import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # 結果: "/user/home/document/file"
print(file_ext)   # 結果: ".txt"

4.2 更改副檔名

如果想要變更副檔名,可以使用 os.path.splitext() 來獲取檔案名稱,然後附加新的副檔名。

new_file_path = file_name + ".jpg"
print(new_file_path)  # 結果: "/user/home/document/file.jpg"
侍エンジニア塾

5. 使用 pathlib 模組獲取檔案名稱的進階應用

從 Python 3.4 開始,pathlib 模組提供了一種更直覺的方式來操作檔案路徑。pathlib 採用了物件導向的方法來處理檔案路徑,使程式碼更加簡潔易讀。

5.1 使用 Path.iterdir() 獲取檔案名稱

使用 pathlib.Path()iterdir() 方法,可以獲取指定目錄內的所有檔案與資料夾名稱。

from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 使用 rglob() 遞迴獲取檔案名稱

如果需要包含子目錄內的所有檔案,可以使用 rglob() 方法,這是 os.walk() 的替代方案。

for file in dir_path.rglob("*"):
    print(file)

6. 檔案名稱的篩選

如果需要根據特定條件篩選檔案名稱,可以使用 glob 模組或 pathlibglob() 方法來完成。

6.1 依副檔名篩選檔案

如果只想獲取特定副檔名的檔案,可以使用萬用字元 * 來篩選。

from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)

這段程式碼會從指定目錄中,僅獲取 .txt 格式的檔案。

侍エンジニア塾

7. 總結

Python 提供了多種方法來獲取檔案名稱,根據不同的需求可以選擇適合的技術。例如,使用 os 模組進行基本操作,或者透過 pathlib 模組來簡化程式碼並提高可讀性。掌握這些技巧後,你可以更有效地管理目錄內的檔案,並根據需要進行篩選與處理。

在未來的文章中,我們將介紹如何進一步操作檔案,例如重新命名、移動、刪除檔案等進階技巧。