當收到大量以 .tmp 為副檔名的圖片檔案時,手動重命名極其繁瑣。本文示範如何使用 Python 標準庫 os 模組,僅需三行核心程式碼即可完成批量重命名。
import os
for filename in os.listdir('.'):
if os.path.splitext(filename)[1] == '.tmp':
new_name = os.path.splitext(filename)[0] + '.jpg'
os.rename(filename, new_name)
print(f"Renamed: {filename} -> {new_name}")
os.listdir('.'):列出當前目錄下所有檔案與資料夾名稱。os.path.splitext(filename):將檔名分割為(主檔名, 副檔名)元組,例如 ('photo', '.tmp')。.tmp,若是則組合新檔名並呼叫 os.rename 重命名。import os
import sys
def batch_rename(root_dir, old_ext, new_ext, dry_run=False):
count = 0
for dirpath, _, filenames in os.walk(root_dir):
for filename in filenames:
if filename.endswith(old_ext):
old_path = os.path.join(dirpath, filename)
new_filename = filename[:-len(old_ext)] + new_ext
new_path = os.path.join(dirpath, new_filename)
if dry_run:
print(f"[預覽] {old_path} -> {new_path}")
else:
try:
os.rename(old_path, new_path)
print(f"[完成] {old_path} -> {new_path}")
count += 1
except OSError as e:
print(f"[錯誤] {old_path}: {e}")
print(f"共處理 {count} 個檔案")
if __name__ == '__main__':
# 使用範例:python rename.py . .tmp .jpg --dry-run
target_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
old_ext = sys.argv[2] if len(sys.argv) > 2 else '.tmp'
new_ext = sys.argv[3] if len(sys.argv) > 3 else '.jpg'
dry_run = '--dry-run' in sys.argv
batch_rename(target_dir, old_ext, new_ext, dry_run)
--dry-run 參數預覽將要變更的檔案,確認無誤後再正式執行。os.rename 會拋出錯誤,建議加入檢查邏輯或自動編號避免覆蓋。Python 的 os 模組提供了極簡潔的檔案系統操作介面,配合簡單的迴路與字串處理,即可輕鬆解決批量重命名等繁瑣任務,展現腳本語言處理系統管理事務的高效能。