欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)文件批量重命名器

 更新時(shí)間:2025年05月25日 14:22:01   作者:笨笨輕松熊  
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要對大量文件進(jìn)行重命名操作,本文將介紹一個(gè)使用Python開發(fā)的文件批量重命名工具,提供了多種重命名模式,有需要的小伙伴可以了解下

前言

在日常工作和學(xué)習(xí)中,我們經(jīng)常需要對大量文件進(jìn)行重命名操作。手動(dòng)一個(gè)個(gè)修改既耗時(shí)又容易出錯(cuò),特別是當(dāng)文件數(shù)量較多時(shí)。本文將介紹一個(gè)使用Python開發(fā)的文件批量重命名工具,它提供了多種重命名模式,可以大大提高文件管理效率。

功能特點(diǎn)

多種重命名模式:前綴添加、后綴添加、字符串替換、序列號命名

交互式操作界面:清晰的提示和引導(dǎo)

安全機(jī)制:操作前確認(rèn)、沖突檢測、錯(cuò)誤處理

靈活配置:可自定義序列號格式、起始值和分隔符

模塊化設(shè)計(jì)

本工具采用模塊化設(shè)計(jì),將不同功能拆分為獨(dú)立函數(shù),提高代碼可讀性和可維護(hù)性。下面我們來逐一了解各個(gè)模塊的實(shí)現(xiàn)。

1.目錄路徑獲取模塊

import os


def get_directory():
    """獲取用戶輸入的有效目錄路徑"""
    while True:
        dir_path = input("請輸入要處理的目錄路徑:").strip()
        if os.path.isdir(dir_path):
            return os.path.normpath(dir_path)
        print("× 目錄不存在,請重新輸入")

2.文件列表獲取模塊

import os

def list_files(dir_path):
    """列出目錄中的所有文件并返回列表"""
    files = [f for f in sorted(os.listdir(dir_path))
             if os.path.isfile(os.path.join(dir_path, f))]

    print("\n目錄文件列表:")
    for idx, f in enumerate(files, 1):
        print(f"{idx:02d}. {f}")
    return files

3.重命名模式選擇模塊

def get_rename_mode():
    """獲取用戶選擇的命名模式"""
    print("\n請選擇重命名模式:")
    print("1. 添加前綴\t2. 添加后綴")
    print("3. 替換字符串\t4. 序列號")
    while True:
        mode = input("請輸入選項(xiàng) (1-4):").strip()
        if mode in {'1', '2', '3', '4'}:
            return mode
        print("× 無效輸入,請重新選擇")

4.序列號參數(shù)配置模塊

def get_sequence_params():
    """獲取序列號模式參數(shù)"""
    print("\n序列號模式參數(shù)設(shè)置:")
    try:
        start = int(input("起始數(shù)字 (默認(rèn)1):") or 1)
        digits = int(input("位數(shù) (默認(rèn)3):") or 3)
        sep = input("分隔符 (默認(rèn)_):") or "_"
        return start, digits, sep
    except ValueError:
        print("! 輸入無效,使用默認(rèn)設(shè)置:起始=1,位數(shù)=3,分隔符=_")
        return 1, 3, "_"

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

下面是整合了所有模塊的完整代碼實(shí)現(xiàn):

import os


def get_directory():
    """獲取用戶輸入的有效目錄路徑"""
    while True:
        dir_path = input("請輸入要處理的目錄路徑:").strip()
        if os.path.isdir(dir_path):
            return os.path.normpath(dir_path)
        print("× 目錄不存在,請重新輸入")


def list_files(dir_path):
    """列出目錄中的所有文件并返回列表"""
    files = [f for f in sorted(os.listdir(dir_path))
             if os.path.isfile(os.path.join(dir_path, f))]

    print("\n目錄文件列表:")
    for idx, f in enumerate(files, 1):
        print(f"{idx:02d}. {f}")
    return files


def get_rename_mode():
    """獲取用戶選擇的命名模式"""
    print("\n請選擇重命名模式:")
    print("1. 添加前綴\t2. 添加后綴")
    print("3. 替換字符串\t4. 序列號")
    while True:
        mode = input("請輸入選項(xiàng) (1-4):").strip()
        if mode in {'1', '2', '3', '4'}:
            return mode
        print("× 無效輸入,請重新選擇")


def get_sequence_params():
    """獲取序列號模式參數(shù)"""
    print("\n序列號模式參數(shù)設(shè)置:")
    try:
        start = int(input("起始數(shù)字 (默認(rèn)1):") or 1)
        digits = int(input("位數(shù) (默認(rèn)3):") or 3)
        sep = input("分隔符 (默認(rèn)_):") or "_"
        return start, digits, sep
    except ValueError:
        print("! 輸入無效,使用默認(rèn)設(shè)置:起始=1,位數(shù)=3,分隔符=_")
        return 1, 3, "_"


def main():
    # 獲取目錄路徑
    dir_path = get_directory()

    # 獲取文件列表
    files = list_files(dir_path)
    if not files:
        print("! 該目錄沒有可操作文件")
        return

    # 確認(rèn)操作
    if input("\n是否繼續(xù)操作?(y/n) ").lower() != 'y':
        print("操作已取消")
        return

    # 獲取重命名模式
    mode = get_rename_mode()

    # 獲取模式參數(shù)
    params = {}
    if mode == '1':
        params['prefix'] = input("\n請輸入要添加的前綴:")
    elif mode == '2':
        params['suffix'] = input("\n請輸入要添加的后綴:")
    elif mode == '3':
        params['old'] = input("\n請輸入要替換的字符串:")
        params['new'] = input("請輸入替換后的新字符串:")
    elif mode == '4':
        params['start'], params['digits'], params['sep'] = get_sequence_params()

    # 二次確認(rèn)
    if input("\n!! 確認(rèn)執(zhí)行重命名操作?(y/n) ").lower() != 'y':
        print("操作已取消")
        return

    # 執(zhí)行重命名
    counter = 0
    current_num = params.get('start', 0)

    for filename in files:
        # 跳過隱藏文件(可選)
        if filename.startswith('.'):
            continue

        # 分割文件名和擴(kuò)展名
        file_path = os.path.join(dir_path, filename)
        base, ext = os.path.splitext(filename)
        new_base = base

        # 根據(jù)模式生成新文件名
        if mode == '1':
            new_base = f"{params['prefix']}{base}"
        elif mode == '2':
            new_base = f"{base}{params['suffix']}"
        elif mode == '3':
            new_base = base.replace(params['old'], params['new'])
        elif mode == '4':
            num_format = f"{current_num:0{params['digits']}}d"
            new_base = f"{num_format}{params['sep']}{base}"
            current_num += 1

        new_name = f"{new_base}{ext}"
        new_path = os.path.join(dir_path, new_name)

        # 跳過未修改的情況
        if new_name == filename:
            continue

        # 執(zhí)行重命名
        try:
            if not os.path.exists(new_path):
                os.rename(file_path, new_path)
                print(f"√ {filename} → {new_name}")
                counter += 1
            else:
                print(f"! 沖突:{new_name} 已存在")
        except Exception as e:
            print(f"× 錯(cuò)誤:重命名 {filename} 失敗 - {str(e)}")

    print(f"\n操作完成,成功重命名 {counter}/{len(files)} 個(gè)文件")


if __name__ == "__main__":
    print("=== 文件批量重命名工具 ===")
    main()

代碼解析

核心設(shè)計(jì)思路

用戶體驗(yàn)優(yōu)先:

  • 清晰的提示信息和錯(cuò)誤反饋
  • 操作前確認(rèn)機(jī)制,防止誤操作
  • 列表顯示處理文件,讓用戶了解操作對象

安全性考慮:

  • 檢測目標(biāo)文件是否存在,避免覆蓋
  • 異常捕獲處理,確保程序穩(wěn)定運(yùn)行
  • 操作結(jié)果明確展示,方便用戶核對

功能模塊化:

  • 每個(gè)功能獨(dú)立封裝為函數(shù)
  • 清晰的函數(shù)命名和注釋
  • 參數(shù)傳遞而非全局變量

技術(shù)要點(diǎn)

1.路徑處理:

  • 使用os.path.isdir()驗(yàn)證目錄有效性
  • 使用os.path.normpath()標(biāo)準(zhǔn)化路徑格式
  • 使用os.path.join()構(gòu)建完整文件路徑
  • 使用os.path.splitext()分離文件名和擴(kuò)展名

2.列表推導(dǎo)式:

  • [f for f in sorted(os.listdir(dir_path)) if os.path.isfile(os.path.join(dir_path, f))]
  • 一行代碼實(shí)現(xiàn)文件過濾和排序

3.字符串格式化:

  • f-string實(shí)現(xiàn)動(dòng)態(tài)字符串拼接
  • 使用{current_num:0{params['digits']}}d實(shí)現(xiàn)動(dòng)態(tài)寬度的數(shù)字格式化

4.輸入驗(yàn)證與默認(rèn)值:

  • 使用input(...) or default_value提供默認(rèn)值
  • 使用集合{'1', '2', '3', '4'}高效驗(yàn)證輸入選項(xiàng)

進(jìn)階改進(jìn)方向

圖形界面:添加GUI界面,提升用戶體驗(yàn)

正則表達(dá)式支持:增加正則表達(dá)式匹配和替換功能

預(yù)覽功能:在執(zhí)行前預(yù)覽重命名結(jié)果

撤銷功能:添加操作日志和撤銷功能

批處理模式:支持從配置文件讀取參數(shù),實(shí)現(xiàn)無人工干預(yù)的批處理

遞歸處理:支持遞歸處理子目錄中的文件

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

相關(guān)文章

  • jupyter notebook tensorflow打印device信息實(shí)例

    jupyter notebook tensorflow打印device信息實(shí)例

    這篇文章主要介紹了jupyter notebook tensorflow打印device信息實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python如何按照自己順序讀出文件名

    python如何按照自己順序讀出文件名

    這篇文章主要介紹了python如何按照自己順序讀出文件名問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python os模塊介紹

    Python os模塊介紹

    這篇文章主要介紹了Python os模塊介紹,需要的朋友可以參考下
    2014-11-11
  • Python?tkinter控件樣式詳解

    Python?tkinter控件樣式詳解

    tkinter對控件的諸多屬性提供了可定制的功能,下面以最常用的按鈕作為示例,集中展示其樣式特點(diǎn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • Python去除列表中重復(fù)元素的方法

    Python去除列表中重復(fù)元素的方法

    這篇文章主要介紹了Python去除列表中重復(fù)元素的方法,實(shí)例分析了Python中去除列表重復(fù)元素的使用技巧,需要的朋友可以參考下
    2015-03-03
  • python解析PDF程序代碼

    python解析PDF程序代碼

    python解析pdf信息,目前還是不能做到很完善,每個(gè)方法都會有它的弊端,都需要結(jié)合自己的業(yè)務(wù)場景來和其它方法一塊進(jìn)行使用,從而達(dá)到一個(gè)相對滿意的目標(biāo),接下來給大家介紹python解析PDF的程序代碼,一起看看吧
    2021-06-06
  • 使用BeautifulSoup4解析XML的方法小結(jié)

    使用BeautifulSoup4解析XML的方法小結(jié)

    這篇文章主要介紹了使用BeautifulSoup4解析XML的方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python爬取各省降水量及可視化詳解

    python爬取各省降水量及可視化詳解

    本文是學(xué)習(xí)python,故選取了python最常用的爬蟲作為實(shí)操訓(xùn)練同時(shí),還添加了可視化和GUI入門的內(nèi)容使爬取的內(nèi)容應(yīng)用更豐富,需要的朋友可以參考下
    2021-04-04
  • Python處理RSS、ATOM模塊FEEDPARSER介紹

    Python處理RSS、ATOM模塊FEEDPARSER介紹

    這篇文章主要介紹了Python處理RSS、ATOM模塊FEEDPARSER介紹,本文只是做個(gè)入門級的簡潔介紹,需要的朋友可以參考下
    2015-02-02
  • python獲取酷狗音樂top500的下載地址 MP3格式

    python獲取酷狗音樂top500的下載地址 MP3格式

    這篇文章主要介紹了python獲取酷狗音樂top500的下載地址 MP3格式,文中給大家提到了python--爬取酷狗TOP500的數(shù)據(jù),需要的朋友可以參考下
    2018-04-04

最新評論