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


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

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

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

示例

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

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

  • 然後,我們迭代檔案列表並檢查檔名中是否存在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。

  • 如果條件滿足,我們使用Path物件的replace()方法和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.