【💊 Python的解憂錦囊】取得沒有副檔名檔案名稱(filename without the extension)

更新於 發佈於


圖片來源

圖片來源

請耐心閱讀到最後, 我們會提供更優雅的方式來處理這項需求…

故事起源

我們常常在使用Python的過程中會進行I/O的一些處理, 那麼最基本的就會是讀取檔案列表並對每一個特定的檔案名稱進行處理, 像這樣:

import glob

mp4_files = glob.glob(os.path.join(pwd, '**/*.mp4'))

那假設我們的檔案擺放預期如下, 會有一個影片檔配一個字幕檔:

|- dir
|- xxx.srt
|- xxx.mp4


情境題

❓ 今天我們打算開發一個小工具, 那麼小工具的功能主要是「檢查每個影片檔都需要有字幕檔」。

遇到上述的情境, 你會怎麼做?

嗯…非常簡單, 我們在列舉檔案清單的過程中(在前面的故事起源有提到讀取檔案列表), 那該檔案清單的內容為:

txt_files

# dir/1.mp4
# dir/2.mp4
...
# dir/${檔名}.mp4

接下來我們只要設法解析出「檔名」的部份再結合字串組合成「1.srt」去檢查該檔案是否存在即可, 看到這裡會有個關鍵點需要處理:

  1. 如何取得沒有副檔名(.mp4)的檔名。
  2. 檔案路徑組合。
  3. 檢查檔案(.srt)是否存在。


帶你解題

有鑑於上述的情境題, 我們應該要好好發揮軟體開發的專長來進行解題一番, 那麼首先我們稍微看了一下Python的標準函式庫之中有個不錯的功能可以使用也就是 ➡️「os.path」, 讓我們來 ⛏️ 挖挖看有沒有寶藏吧!

看來有一個東西還不錯, 可能會是我們需要的答案:

import os

file_path = 'dir/1.mp4'
# 1.mp4
basename = os.path.basename(file_path)

我們可以看到它雖然可以幫我們去除路徑, 也順利取得檔案名稱, 但這個結果顯然還不是非常理想, 仍然具有副檔名(.mp4)。

進一步來說我們還可以土炮一點這樣做

# basename = 1.mp4
# 1
print(os.path.splitext(basename)[0])

更好的方法...

嗯…雖然達成了我們的目的, 但好像有點冗長啊! 有沒有更好的技巧呢? 答案是有的, 就讓我們來為您說明一番吧, 咱們來看看「pathlib」這個酷東西唄, 它提供了更優雅的方式來處理檔案路徑的一些操作, 以上述情境為例我們可以這樣做:

from pathlib import Path

file_path = 'dir/1.mp4'

# 透過.stem取得無後綴的純路徑
print(Path(file_path).stem)

P.S ⚠️ 這個模組需要Python 3.4以上的版本才能使用喔!

另外對於「.stem」這個API有興趣的朋友, 這裡提供連結給您查閱:

🌐 PurePath.stem


喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
129會員
283內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
檔案存取 路徑與檔案處理是很常用的功能,他們可以獨立運作,但是常常搭配一起使用,如果你處理的檔案是在當下的目錄,可以不需要使用路徑的功能單獨讀寫檔案,如果是想要做一些資料夾的管理,就需要理解路徑和檔案之間的關係。
Thumbnail
檔案存取 路徑與檔案處理是很常用的功能,他們可以獨立運作,但是常常搭配一起使用,如果你處理的檔案是在當下的目錄,可以不需要使用路徑的功能單獨讀寫檔案,如果是想要做一些資料夾的管理,就需要理解路徑和檔案之間的關係。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
請耐心閱讀到最後, 我們會提供更優雅的方式來處理這項需求… 故事起源 我們常常在使用Python的過程中會進行I/O的一些處理, 那麼最基本的就會是讀取檔案列表並對每一個特定的檔案名稱進行處理, 像這樣: import glob mp4_files = glob.glob(os.path
Thumbnail
請耐心閱讀到最後, 我們會提供更優雅的方式來處理這項需求… 故事起源 我們常常在使用Python的過程中會進行I/O的一些處理, 那麼最基本的就會是讀取檔案列表並對每一個特定的檔案名稱進行處理, 像這樣: import glob mp4_files = glob.glob(os.path
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News