Python 批次改名:一千個檔案,十秒改好晒

手機影相、掃描文件、同事傳嘅檔案,日積月累就變成一堆 IMG_2381.jpg、未命名(3).pdf、掃描_20260115_144732.png。想逐個改名,一千個檔案你唔會想人手撳。呢篇教你用 Python 十零行 code,一個指令就將成個資料夾嘅檔名一次過執靚 —— 加前綴、順序編號、刪走亂碼文字,全部自動。

有咩場景用到?

改名唔止係為咗好睇,仲幫你慳時間同減少出錯:

  • 相片 —— 旅行相由 IMG_2381.jpg 變成 東京_001.jpg,一眼搵到
  • 發票 / 合約 —— 掃描檔統一加日期前綴 20260909_發票_xxx,排序自然正確
  • 報表 —— 月結檔名加「_final」,唔會撈亂舊版同新版

先認識兩個工具

成個程式只靠兩個 Python 內置模組:

  • glob —— 用萬用字元(wildcard)搵出符合條件嘅檔案,例如 *.jpg 就係「所有 jpg」
  • os.rename —— 改檔名嘅核心指令,新舊名一換就完成

兩者都係跟機內置,唔使 pip 安裝任何嘢。

完整程式

開一個新檔案 rename.py,貼入以下 code:

import os import glob # 設定區 folder = os.path.expanduser("~/Pictures/旅行相") # 改成你嘅資料夾 pattern = "*.jpg" # 揀邊類檔案 prefix = "旅行_" # 新檔名前綴 DRY_RUN = True # True=預覽 False=真改 files = sorted(glob.glob(os.path.join(folder, pattern))) for i, path in enumerate(files, start=1): folder_part, old_name = os.path.split(path) ext = os.path.splitext(old_name)[1] # 保留副檔名 new_name = f"{prefix}{i:03d}{ext}" # 旅行_001.jpg new_path = os.path.join(folder_part, new_name) if DRY_RUN: print(f"預覽:{old_name} -> {new_name}") else: os.rename(path, new_path) print(f"已改:{old_name} -> {new_name}") print() print(f"共處理 {len(files)} 個檔案")

逐行解釋

  • sorted(glob.glob(...)) —— 搵出資料夾入面所有 .jpg,並按字母排序,確保編號順序穩定。
  • os.path.split(path) —— 將路徑拆開做(資料夾,檔名)兩部分,我哋只改檔名部分。
  • os.path.splitext(old_name)[1] —— 抽出副檔名(例如 .jpg),改完名要原封不動加返上去。
  • f"{prefix}{i:03d}{ext}" —— 砌新名。:03d 係「三位數、前面補零」,所以第 7 個檔會係 旅行_007.jpg。
  • DRY_RUN —— 安全掣。初初必定設 True,只列預覽唔會真改,睇啱先轉 False。

三個常用改名規則

改 new_name 嗰行就等於換咗改名規則,三個最常用:

規則一:順序編號(上面已示範)

旅行_001.jpg、旅行_002.jpg… 最適合相片同批次文件。

規則二:刪走固定字眼

new_name = old_name.replace("IMG_", "")

例如 IMG_2381.jpg 會變成 2381.jpg。

規則三:加前綴 / 後綴

new_name = "20260909_" + old_name # 加前綴 new_name = old_name.replace(".jpg", "_final.jpg") # 加後綴

執行

喺命令提示字元切換去 rename.py 所在位置,打:

python rename.py

記得先跑一次 DRY_RUN = True 嘅預覽,確認無誤先轉 False 正式執行。十秒內,成個資料夾就執靚晒。

撞名要小心

如果兩個唔同嘅檔改完之後名一樣,os.rename 會直接覆蓋舊檔,原本嘅資料就咁消失。所以正式執行前,加一個「跳過撞名」嘅保護:

if os.path.exists(new_path): print(f"跳過:{new_name} 已存在") continue os.rename(path, new_path)

呢段 code 放喺 os.rename 前面,見到同名就 skip,安全好多。

進階:連子資料夾一齊改

上面只改最表層嘅檔案。如果你想連埋入面所有子資料夾,用 os.walk 取代 glob:

counter = 1 for folder_part, dirs, filenames in os.walk(folder): for old_name in sorted(filenames): if not old_name.endswith(".jpg"): continue new_name = f"{prefix}{counter:03d}.jpg" os.rename(os.path.join(folder_part, old_name), os.path.join(folder_part, new_name)) counter += 1

os.walk 會自動逐層行晒所有子資料夾,適合成個專案資料夾一次過執靚。

安全提示:先備份

改名係「不可逆」嘅操作,最穩陣係先 copy 一個細資料夾做測試,確認效果啱先攞去正式用。甚至用 shutil.copytree 成個資料夾備份一次:

import shutil shutil.copytree(folder, folder + "_backup")

萬一改錯咗名,即刻由備份還原,零損失。

總結

今篇Python 教學總結: 批次改名係「性價比」最高嘅自動化入門 —— 唔使裝任何套件,十零行 code 就解決一個日日都要面對嘅煩惱。熟咗之後,你可以用同一套路去批次改 PDF、批次壓縮、甚至批次加水印。自動化嘅第一步,通常就係由呢啲細位開始。