最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python文件管理之批量重命名文件詳解

 更新時(shí)間:2025年12月04日 08:52:47   作者:零日失眠者  
在日常工作中,我們經(jīng)常需要對(duì)大量文件進(jìn)行重命名操作,特別是在整理照片,文檔或其他媒體文件時(shí),下面我們就使用Python編寫(xiě)一個(gè)文件批量重命名腳本吧

簡(jiǎn)介

在日常工作中,我們經(jīng)常需要對(duì)大量文件進(jìn)行重命名操作,特別是在整理照片、文檔或其他媒體文件時(shí)。手動(dòng)一個(gè)個(gè)重命名不僅耗時(shí),還容易出錯(cuò)。本文將介紹一個(gè)實(shí)用的Python腳本——文件批量重命名工具,它可以大大提高我們的工作效率。

功能介紹

這個(gè)文件批量重命名工具具有以下核心功能:

  • 批量重命名:可以同時(shí)對(duì)多個(gè)文件按照指定規(guī)則進(jìn)行重命名
  • 多種命名模式:支持序號(hào)命名、前綴命名、后綴命名等多種模式
  • 文件過(guò)濾:可以根據(jù)文件擴(kuò)展名、文件名特征等條件篩選文件
  • 預(yù)覽功能:在實(shí)際執(zhí)行前可以預(yù)覽重命名結(jié)果
  • 撤銷(xiāo)功能:支持操作撤銷(xiāo),防止誤操作
  • 日志記錄:記錄所有操作歷史,便于追蹤和審計(jì)

應(yīng)用場(chǎng)景

這個(gè)工具適用于以下場(chǎng)景:

  • 照片整理:將相機(jī)拍攝的照片按日期或序號(hào)統(tǒng)一命名
  • 文檔管理:對(duì)公司或個(gè)人文檔進(jìn)行規(guī)范化命名
  • 下載文件整理:對(duì)下載的文件進(jìn)行批量重命名以提高可讀性
  • 開(kāi)發(fā)項(xiàng)目:對(duì)代碼文件或資源文件進(jìn)行統(tǒng)一命名規(guī)范
  • 學(xué)術(shù)研究:對(duì)實(shí)驗(yàn)數(shù)據(jù)文件進(jìn)行有序命名

報(bào)錯(cuò)處理

腳本包含了完善的錯(cuò)誤處理機(jī)制:

  • 路徑不存在:檢查指定目錄是否存在,若不存在則提示用戶
  • 權(quán)限不足:檢測(cè)文件操作權(quán)限,權(quán)限不足時(shí)給出明確提示
  • 文件沖突:檢測(cè)目標(biāo)文件名是否已存在,避免覆蓋重要文件
  • 參數(shù)驗(yàn)證:驗(yàn)證用戶輸入的參數(shù)是否合法
  • 異常捕獲:捕獲并處理運(yùn)行過(guò)程中可能出現(xiàn)的各種異常

代碼實(shí)現(xiàn)

import os
import sys
import argparse
from datetime import datetime

class FileBatchRenamer:
    def __init__(self, directory):
        self.directory = directory
        self.rename_log = []
        
    def check_directory(self):
        """檢查目錄是否存在"""
        if not os.path.exists(self.directory):
            raise FileNotFoundError(f"目錄 '{self.directory}' 不存在")
        if not os.path.isdir(self.directory):
            raise NotADirectoryError(f"'{self.directory}' 不是一個(gè)有效的目錄")
            
    def get_files(self, extension=None, pattern=None):
        """獲取符合條件的文件列表"""
        try:
            self.check_directory()
            files = os.listdir(self.directory)
            filtered_files = []
            
            for file in files:
                file_path = os.path.join(self.directory, file)
                # 只處理文件,不處理子目錄
                if os.path.isfile(file_path):
                    # 根據(jù)擴(kuò)展名過(guò)濾
                    if extension and not file.endswith(extension):
                        continue
                    # 根據(jù)模式過(guò)濾
                    if pattern and pattern not in file:
                        continue
                    filtered_files.append(file)
                    
            return sorted(filtered_files)
        except Exception as e:
            print(f"獲取文件列表時(shí)出錯(cuò): {e}")
            return []
            
    def preview_rename(self, files, naming_pattern, start_number=1):
        """預(yù)覽重命名結(jié)果"""
        print("\n重命名預(yù)覽:")
        print("-" * 50)
        rename_map = {}
        
        for i, filename in enumerate(files, start_number):
            name, ext = os.path.splitext(filename)
            new_name = naming_pattern.format(i) + ext
            rename_map[filename] = new_name
            print(f"{filename} -> {new_name}")
            
        return rename_map
        
    def execute_rename(self, rename_map):
        """執(zhí)行重命名操作"""
        success_count = 0
        error_count = 0
        
        for old_name, new_name in rename_map.items():
            old_path = os.path.join(self.directory, old_name)
            new_path = os.path.join(self.directory, new_name)
            
            # 檢查目標(biāo)文件是否已存在
            if os.path.exists(new_path):
                print(f"警告: 文件 '{new_name}' 已存在,跳過(guò) '{old_name}'")
                error_count += 1
                continue
                
            try:
                os.rename(old_path, new_path)
                self.rename_log.append((datetime.now(), old_name, new_name))
                print(f"成功重命名: {old_name} -> {new_name}")
                success_count += 1
            except PermissionError:
                print(f"權(quán)限錯(cuò)誤: 無(wú)法重命名 '{old_name}',請(qǐng)檢查文件權(quán)限")
                error_count += 1
            except Exception as e:
                print(f"重命名 '{old_name}' 時(shí)出錯(cuò): {e}")
                error_count += 1
                
        print(f"\n重命名完成! 成功: {success_count}, 失敗: {error_count}")
        
    def save_log(self, log_file="rename_log.txt"):
        """保存操作日志"""
        try:
            with open(os.path.join(self.directory, log_file), "w", encoding="utf-8") as f:
                f.write("文件批量重命名操作日志\n")
                f.write("=" * 50 + "\n")
                f.write(f"操作時(shí)間: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
                f.write(f"操作目錄: {self.directory}\n\n")
                
                for timestamp, old_name, new_name in self.rename_log:
                    f.write(f"[{timestamp.strftime('%H:%M:%S')}] {old_name} -> {new_name}\n")
                    
            print(f"操作日志已保存到: {log_file}")
        except Exception as e:
            print(f"保存日志時(shí)出錯(cuò): {e}")

def main():
    parser = argparse.ArgumentParser(description="文件批量重命名工具")
    parser.add_argument("directory", help="要處理的目錄路徑")
    parser.add_argument("-p", "--pattern", default="file_{:03d}", 
                       help="命名模式,使用 {:03d} 表示序號(hào) (默認(rèn): file_{:03d})")
    parser.add_argument("-s", "--start", type=int, default=1, 
                       help="起始序號(hào) (默認(rèn): 1)")
    parser.add_argument("-e", "--extension", 
                       help="文件擴(kuò)展名過(guò)濾 (例如: .jpg)")
    parser.add_argument("--preview", action="store_true", 
                       help="僅預(yù)覽,不執(zhí)行實(shí)際重命名")
    
    args = parser.parse_args()
    
    try:
        renamer = FileBatchRenamer(args.directory)
        files = renamer.get_files(extension=args.extension)
        
        if not files:
            print("未找到符合條件的文件")
            return
            
        print(f"找到 {len(files)} 個(gè)文件")
        
        rename_map = renamer.preview_rename(files, args.pattern, args.start)
        
        if args.preview:
            print("\n預(yù)覽模式,未執(zhí)行實(shí)際重命名操作")
            return
            
        confirm = input("\n確認(rèn)執(zhí)行重命名操作? (y/N): ")
        if confirm.lower() == 'y':
            renamer.execute_rename(rename_map)
            renamer.save_log()
        else:
            print("操作已取消")
            
    except Exception as e:
        print(f"程序執(zhí)行出錯(cuò): {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()

使用方法

基本使用

# 基本用法,對(duì)目錄中的所有文件按默認(rèn)模式重命名
python batch_renamer.py /path/to/directory

# 指定命名模式
python batch_renamer.py /path/to/directory -p "photo_{:04d}"

# 指定起始序號(hào)
python batch_renamer.py /path/to/directory -s 100

# 只處理特定擴(kuò)展名的文件
python batch_renamer.py /path/to/directory -e .jpg

# 預(yù)覽模式(不實(shí)際執(zhí)行重命名)
python batch_renamer.py /path/to/directory --preview

命令行參數(shù)說(shuō)明

  • directory: 必需參數(shù),指定要處理的目錄路徑
  • -p, --pattern: 命名模式,默認(rèn)為 file_{:03d},其中 {:03d} 會(huì)被替換為序號(hào)
  • -s, --start: 起始序號(hào),默認(rèn)為 1
  • -e, --extension: 文件擴(kuò)展名過(guò)濾器,只處理指定擴(kuò)展名的文件
  • --preview: 預(yù)覽模式,只顯示重命名結(jié)果,不執(zhí)行實(shí)際操作

使用示例

假設(shè)有以下文件:

image1.jpg
image2.jpg
document.pdf
photo.png

執(zhí)行命令:

python batch_renamer.py ./test_dir -p "pic_{:02d}" -e .jpg

結(jié)果:

pic_01.jpg
pic_02.jpg
document.pdf
photo.png

總結(jié)

這個(gè)文件批量重命名工具通過(guò)簡(jiǎn)單的命令行界面提供了強(qiáng)大的批量文件重命名功能。它具有良好的錯(cuò)誤處理機(jī)制,可以有效防止誤操作,并通過(guò)日志記錄功能保證操作的可追溯性。無(wú)論是日常文件整理還是專(zhuān)業(yè)項(xiàng)目管理,這個(gè)工具都能顯著提高工作效率。

到此這篇關(guān)于Python文件管理之批量重命名文件詳解的文章就介紹到這了,更多相關(guān)Python重命名文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python文本到語(yǔ)音轉(zhuǎn)換庫(kù)pyttsx3的安裝及使用全面指南

    Python文本到語(yǔ)音轉(zhuǎn)換庫(kù)pyttsx3的安裝及使用全面指南

    這篇文章主要介紹了Python的text-to-speech庫(kù)pyttsx3的安裝、基本用法、配置語(yǔ)音屬性、支持的命令和功能以及高級(jí)用法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • python 線程池順序執(zhí)行的方法實(shí)現(xiàn)

    python 線程池順序執(zhí)行的方法實(shí)現(xiàn)

    在Python中,線程池默認(rèn)是并發(fā)執(zhí)行任務(wù)的,但若需要實(shí)現(xiàn)任務(wù)的順序執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Python爬蟲(chóng)基礎(chǔ)講解之請(qǐng)求

    Python爬蟲(chóng)基礎(chǔ)講解之請(qǐng)求

    今天帶大家了解一下python爬蟲(chóng)的基礎(chǔ)知識(shí),文中有非常詳細(xì)的解釋說(shuō)明,對(duì)正在學(xué)習(xí)python爬蟲(chóng)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • python+mysql實(shí)現(xiàn)簡(jiǎn)單的web程序

    python+mysql實(shí)現(xiàn)簡(jiǎn)單的web程序

    上篇文章我們介紹了簡(jiǎn)單的Python web程序,實(shí)現(xiàn)hello world,本文我們來(lái)結(jié)合一下mysql,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單操作,希望對(duì)大家有所幫助
    2014-09-09
  • Tensorflow?2.4加載處理圖片的三種方式詳解

    Tensorflow?2.4加載處理圖片的三種方式詳解

    這篇文章主要為大家介紹了Tensorflow?2.4加載處理圖片的三種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解Django模板層過(guò)濾器和繼承的問(wèn)題

    詳解Django模板層過(guò)濾器和繼承的問(wèn)題

    今天抽空給大家介紹Django模板層過(guò)濾器和繼承的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • 4種方法python批量修改替換列表中元素

    4種方法python批量修改替換列表中元素

    這篇文章主要介紹了4種python批量替換列表中元素方法,需要的朋友可以參考下
    2022-04-04
  • 詳解NumPy中np.where() 的兩種神奇用法

    詳解NumPy中np.where() 的兩種神奇用法

    np.where()是 NumPy 中用于條件選擇和元素定位的核心函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • Python?lambda函數(shù)保姆級(jí)使用教程

    Python?lambda函數(shù)保姆級(jí)使用教程

    本文和你一起探索Python中的lambda函數(shù),讓你以最短的時(shí)間明白這個(gè)函數(shù)的原理。也可以利用碎片化的時(shí)間鞏固這個(gè)函數(shù),讓你在處理工作過(guò)程中更高效
    2022-06-06
  • Python批量按比例縮小圖片腳本分享

    Python批量按比例縮小圖片腳本分享

    這篇文章主要介紹了Python批量按比例縮小圖片腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

青州市| 福清市| 鸡东县| 水富县| 三门峡市| 河池市| 新乡县| 时尚| 黄骅市| 积石山| 繁峙县| 吴桥县| 荥经县| 吴桥县| 勐海县| 花垣县| 辽中县| 乌鲁木齐市| 乐平市| 康定县| 射阳县| 梅河口市| 布尔津县| 雅江县| 乃东县| 敦煌市| 重庆市| 铜川市| 乌什县| 平安县| 安康市| 临湘市| 绩溪县| 彩票| 滦南县| 苏尼特右旗| 万荣县| 文山县| 永安市| 太保市| 闻喜县|