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

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

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

簡介

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

功能介紹

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

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

應(yīng)用場景

這個工具適用于以下場景:

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

報錯處理

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

  • 路徑不存在:檢查指定目錄是否存在,若不存在則提示用戶
  • 權(quán)限不足:檢測文件操作權(quán)限,權(quán)限不足時給出明確提示
  • 文件沖突:檢測目標(biāo)文件名是否已存在,避免覆蓋重要文件
  • 參數(shù)驗(yàn)證:驗(yàn)證用戶輸入的參數(shù)是否合法
  • 異常捕獲:捕獲并處理運(yùn)行過程中可能出現(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}' 不是一個有效的目錄")
            
    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ò)展名過濾
                    if extension and not file.endswith(extension):
                        continue
                    # 根據(jù)模式過濾
                    if pattern and pattern not in file:
                        continue
                    filtered_files.append(file)
                    
            return sorted(filtered_files)
        except Exception as e:
            print(f"獲取文件列表時出錯: {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}' 已存在,跳過 '{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)限錯誤: 無法重命名 '{old_name}',請檢查文件權(quán)限")
                error_count += 1
            except Exception as e:
                print(f"重命名 '{old_name}' 時出錯: {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"操作時間: {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"保存日志時出錯: {e}")

def main():
    parser = argparse.ArgumentParser(description="文件批量重命名工具")
    parser.add_argument("directory", help="要處理的目錄路徑")
    parser.add_argument("-p", "--pattern", default="file_{:03d}", 
                       help="命名模式,使用 {:03d} 表示序號 (默認(rèn): file_{:03d})")
    parser.add_argument("-s", "--start", type=int, default=1, 
                       help="起始序號 (默認(rèn): 1)")
    parser.add_argument("-e", "--extension", 
                       help="文件擴(kuò)展名過濾 (例如: .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)} 個文件")
        
        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í)行出錯: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()

使用方法

基本使用

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

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

# 指定起始序號
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ù)說明

  • directory: 必需參數(shù),指定要處理的目錄路徑
  • -p, --pattern: 命名模式,默認(rèn)為 file_{:03d},其中 {:03d} 會被替換為序號
  • -s, --start: 起始序號,默認(rèn)為 1
  • -e, --extension: 文件擴(kuò)展名過濾器,只處理指定擴(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é)

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

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

相關(guān)文章

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

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

    這篇文章主要介紹了Python的text-to-speech庫pyttsx3的安裝、基本用法、配置語音屬性、支持的命令和功能以及高級用法,文中通過代碼介紹的非常詳細(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í)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Python爬蟲基礎(chǔ)講解之請求

    Python爬蟲基礎(chǔ)講解之請求

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

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

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

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

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

    詳解Django模板層過濾器和繼承的問題

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

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

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

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

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

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

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

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

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

最新評論

德江县| 金昌市| 营口市| 浙江省| 清水河县| 思茅市| 京山县| 石渠县| 泽普县| 伊春市| 台江县| 离岛区| 通州区| 新民市| 嘉善县| 永丰县| 忻城县| 西平县| 盐亭县| 徐闻县| 中江县| 新野县| 马鞍山市| 灵璧县| 海丰县| 惠州市| 茌平县| 尚义县| 江安县| 图们市| 盘山县| 易门县| 宁国市| 吉木乃县| 壤塘县| 奈曼旗| 灵武市| 诸城市| 客服| 永善县| 土默特左旗|