如何使用 Python 遞迴重新命名多個檔案?


在 Python 中遞迴重新命名多個檔案可能是一項有用的任務,當需要更改目錄及其子目錄中多個檔案的名稱時,這很有幫助。如果您需要替換某些字元、新增字首或字尾或完全更改檔名,Python 擁有強大的工具來完成此類操作。在本文中,我們探討了幾種使用 Python 遞迴重新命名多個檔案的方法。我們考慮了一些程式碼示例,每個示例都演示了一種獨特的方法來完成此任務。因此,讓我們立即開始,輕鬆學習如何遞迴重新命名多個檔案。

利用 os.walk() 遍歷目錄樹

os 模組中的 os.walk() 函式用於遍歷目錄樹並訪問其中的檔案和目錄。我們利用此函式迭代目錄及其子目錄中的所有檔案並執行重新命名操作。讓我們考慮一個示例,該示例演示瞭如何使用 os.walk() 遞迴重新命名多個檔案。

示例

  • 我們首先定義一個名為 rename_files_recursively 的函式,它接受三個引數:directory、old_name 和 new_name。這些引數指示目錄路徑、要重新命名的檔案的舊名稱以及將替換舊名稱的新名稱。

  • 在函式內部,我們使用 os.walk() 函式迭代給定目錄及其子目錄中的所有檔案和目錄。該函式為每次迭代輸出三個值:根目錄、目錄列表和檔案列表。

  • 然後,我們迭代 files 列表並檢查檔名中是否存在 old_name。

  • 如果找到 old_name,我們使用 os.path.join(root, file) 生成檔案的完整路徑。我們還使用 replace() 方法建立新的檔案路徑,將 old_name 替換為 new_name。

  • 最後,我們使用 os.rename() 函式透過將其從原始路徑移動到新路徑來重新命名檔案。

  • 此方法允許我們遞迴遍歷目錄樹並重命名在指定目錄及其子目錄中找到的所有匹配檔案。

import os

def rename_files_recursively(directory, old_name, new_name):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if old_name in file:
                file_path = os.path.join(root, file)
                new_file_path = os.path.join(root, 
file.replace(old_name, new_name))
                os.rename(file_path, new_file_path)

# Example usage
rename_files_recursively('/path/to/directory', 
'old_name', 'new_name')

利用 pathlib.Path.glob() 方法查詢檔案

遞迴重新命名多個檔案的另一種方法是使用 pathlib 模組中的 glob() 方法。glob() 方法允許我們根據特定模式或條件查詢檔案。透過將其與執行遞迴搜尋的 rglob() 方法一起使用,我們可以輕鬆地定位和重新命名多個檔案。這是一個演示此方法的示例。

示例

  • 首先,我們定義一個名為 rename_files_recursively 的函式,它與先前方法中的引數相同:directory、`old_name 和 new_name`。

  • 在函式內部,我們使用宣告的目錄路徑建立一個 Path 物件。

  • 然後,我們使用 rglob('*') 方法遞迴迭代指定目錄及其子目錄中的所有檔案和目錄。

  • 對於找到的每個 file_path,我們檢查它是否為檔案 (file_path.is_file()) 以及檔名中是否存在 old_name。

  • 如果滿足條件,我們使用 replace() 方法和 Path 物件的 with_name() 方法構造新的檔案路徑,將 old_name 替換為 new_name。

  • 最後,我們使用 Path 物件的 rename() 方法重新命名檔案,傳入新的檔案路徑。

此方法提供了一種緊湊且高效的方式,可以使用 pathlib 模組中的 glob() 和 rglob() 方法遞迴定位和重新命名多個檔案。

from pathlib import Path

def rename_files_recursively(directory, old_name, new_name):
    path = Path(directory)
    for file_path in path.rglob('*'):
        if file_path.is_file() and old_name in file_path.name:
            new_file_path = 
file_path.with_name(file_path.name.replace(old_name, new_name))
            file_path.rename(new_file_path)

# Example usage
rename_files_recursively('/path/to/directory', 
'old_name', 'new_name')

示例

這裡,定義了一個函式 rename_files_recursively,它接受兩個引數:folder_path,它是檔案所在的資料夾的路徑;new_prefix,是要新增到檔名中的新字首。該函式利用 os.walk() 方法遞迴遍歷資料夾及其子目錄。然後,它使用 os.rename() 函式透過將新字首附加到其原始名稱來重新命名每個檔案。

import os

def rename_files_recursively(folder_path, new_prefix):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            file_dir, file_name = os.path.split(file_path)
            new_name = new_prefix + file_name
            new_path = os.path.join(file_dir, new_name)
            os.rename(file_path, new_path)

# Usage
rename_files_recursively('/path/to/folder', 'new_prefix_')

示例

在此程式碼中,我們有一個函式 rename_files_recursively,它接受三個引數:folder_path 是檔案所在的資料夾的路徑,search_string 是要替換檔名中的字串,replace_string 是替換 search string 的字串。該函式遍歷資料夾及其子目錄,對於每個檔案,它都會檢查檔名中是否存在 search string。如果存在,它會使用 replace() 方法將 search string 替換為 replace string,並使用 os.rename() 重新命名檔案。

import os

def rename_files_recursively(folder_path, search_string, 
replace_string):
   for root, dirs, files in os.walk(folder_path):
      for file in files:
         if search_string in file:
            file_path = os.path.join(root, file)
            new_name = file.replace(search_string, 
replace_string)
            new_path = os.path.join(root, new_name)
            os.rename(file_path, new_path)

# Usage
rename_files_recursively('/path/to/folder', 'old_string', 'new_string')

在本文中,我們探討了一些使用 Python 遞迴重新命名多個檔案的方法。透過使用 os.walk() 函式以及 pathlib 模組中的 glob() 和 rglob() 方法,我們可以輕鬆遍歷目錄樹,找到所需的檔案,並根據特定條件重新命名它們。在一個示例中,您為每個檔名新增一個新字首,而在另一個示例中,我們對檔名執行搜尋和替換操作。這兩個示例都利用了 Python 的 os 模組的功能來與檔案系統互動,並以遞迴方式高效地重新命名檔案。

如果您需要執行批次重新命名任務或修改檔名以符合特定命名約定,Python 提供了廣泛的強大工具來有效地完成這些任務。透過本文獲得的知識,您可以自信地在 Python 專案中操作檔名並有效地組織您的檔案。

更新於: 2023年7月25日

3K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.