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

Python如何實(shí)現(xiàn)圖片批量重命名功能

 更新時(shí)間:2025年07月30日 09:12:11   作者:封奚澤優(yōu)  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)圖片批量重命名功能,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

主要就是自己進(jìn)行標(biāo)注用到的,想著要是自己一個(gè)個(gè)弄太麻煩了,還是用腳本直接實(shí)現(xiàn)的好。

本文介紹了一個(gè)基于Python的圖片批量重命名工具。該工具使用Tkinter構(gòu)建GUI界面,主要功能包括:

  • 設(shè)置文件名前綴
  • 選擇輸入/輸出目錄
  • 設(shè)置分隔符和連接符號(hào)等

用戶可批量處理jpg/png等常見(jiàn)圖片格式,程序會(huì)將重命名后的圖片復(fù)制到指定目錄并生成記錄文件,記錄新舊文件名對(duì)應(yīng)關(guān)系

工具提供了錯(cuò)誤檢測(cè)機(jī)制,確保輸入有效性,界面設(shè)計(jì)簡(jiǎn)潔直觀,支持窗口居中顯示。該程序適合需要批量處理圖片文件的用戶使用,操作簡(jiǎn)單且功能實(shí)用。

完整代碼

import os
import shutil
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
from pathlib import Path


class ImageRenamerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("圖片批量重命名工具")
        self.setup_ui()
        self.center_window()

    def center_window(self):
        """居中顯示窗口"""
        self.root.update_idletasks()
        width = 550  # 增大窗口寬度
        height = 600  # 增大窗口高度
        x = (self.root.winfo_screenwidth() // 2) - (width // 2)
        y = (self.root.winfo_screenheight() // 2) - (height // 2)
        self.root.geometry(f'{width}x{height}+{x}+{y}')

    def setup_ui(self):
        """設(shè)置UI界面"""
        # 設(shè)置字體
        font_style = ("Microsoft YaHei", 11)

        # 創(chuàng)建主框架,增加內(nèi)邊距
        main_frame = tk.Frame(self.root, padx=20, pady=20)
        main_frame.pack(expand=True, fill="both")

        # 文件名前綴
        tk.Label(main_frame, text="文件名前綴:", font=font_style).grid(row=0, column=0, sticky="w", pady=(0, 10))
        self.prefix_entry = tk.Entry(main_frame, font=font_style)
        self.prefix_entry.grid(row=0, column=1, sticky="ew", pady=(0, 10), padx=(10, 0))

        # 輸入文件夾選擇
        tk.Label(main_frame, text="輸入文件夾:", font=font_style).grid(row=1, column=0, sticky="w", pady=(10, 0))
        self.input_dir_var = tk.StringVar(value=os.getcwd())
        tk.Entry(main_frame, textvariable=self.input_dir_var, font=font_style, state='readonly').grid(row=1, column=1,
                                                                                                      sticky="ew",
                                                                                                      pady=(10, 0),
                                                                                                      padx=(10, 0))
        tk.Button(main_frame, text="瀏覽...", command=self.select_input_dir, font=font_style).grid(row=1, column=2,
                                                                                                   pady=(10, 0),
                                                                                                   padx=(10, 0))

        # 輸出文件夾選擇
        tk.Label(main_frame, text="輸出文件夾:", font=font_style).grid(row=2, column=0, sticky="w", pady=(10, 0))
        default_output = os.path.join(os.getcwd(), "output")
        self.output_dir_var = tk.StringVar(value=default_output)
        tk.Entry(main_frame, textvariable=self.output_dir_var, font=font_style).grid(row=2, column=1, sticky="ew",
                                                                                     pady=(10, 0), padx=(10, 0))
        tk.Button(main_frame, text="瀏覽...", command=self.select_output_dir, font=font_style).grid(row=2, column=2,
                                                                                                    pady=(10, 0),
                                                                                                    padx=(10, 0))

        # 分隔符選擇
        tk.Label(main_frame, text="選擇分隔符:", font=font_style).grid(row=3, column=0, sticky="w", pady=(10, 0))

        separators_frame = tk.Frame(main_frame)
        separators_frame.grid(row=3, column=1, sticky="w", padx=(10, 0), pady=(10, 0))

        self.separator_var = tk.StringVar(value="_")
        separators = [("下劃線(_)", "_"), ("空格( )", " "), ("短橫線(-)", "-"), ("點(diǎn)(.)", ".")]
        for i, (text, value) in enumerate(separators):
            rb = tk.Radiobutton(separators_frame, text=text, variable=self.separator_var,
                                value=value, font=font_style)
            rb.grid(row=i, column=0, sticky="w")

        # 連接符號(hào)選擇
        tk.Label(main_frame, text="選擇連接符號(hào):", font=font_style).grid(row=4, column=0, sticky="w", pady=(10, 0))

        connectors_frame = tk.Frame(main_frame)
        connectors_frame.grid(row=4, column=1, sticky="w", padx=(10, 0), pady=(10, 0))

        self.connector_var = tk.StringVar(value=":")
        connectors = [("冒號(hào)(:)", ":"), ("空格( )", " "), ("短橫線(-)", "-"), ("等號(hào)(=)", "=")]
        for i, (text, value) in enumerate(connectors):
            rb = tk.Radiobutton(connectors_frame, text=text, variable=self.connector_var,
                                value=value, font=font_style)
            rb.grid(row=i, column=0, sticky="w")

        # 執(zhí)行按鈕 - 放在底部并居中
        button_frame = tk.Frame(main_frame)
        button_frame.grid(row=5, column=0, columnspan=3, pady=(20, 0), sticky="ew")

        tk.Button(button_frame, text="開(kāi)始重命名", command=self.rename_images,
                  font=font_style, bg="#4CAF50", fg="white", width=15).pack(pady=10)

        # 配置網(wǎng)格權(quán)重,使內(nèi)容居中
        main_frame.columnconfigure(1, weight=1)

    def select_input_dir(self):
        """選擇輸入文件夾"""
        dir_path = filedialog.askdirectory(title="選擇輸入文件夾", initialdir=self.input_dir_var.get())
        if dir_path:
            self.input_dir_var.set(dir_path)

    def select_output_dir(self):
        """選擇輸出文件夾"""
        dir_path = filedialog.askdirectory(title="選擇輸出文件夾", initialdir=self.output_dir_var.get())
        if dir_path:
            self.output_dir_var.set(dir_path)

    def rename_images(self):
        """執(zhí)行重命名操作"""
        prefix = self.prefix_entry.get().strip()
        if not prefix:
            messagebox.showerror("錯(cuò)誤", "請(qǐng)輸入文件名前綴!")
            return

        input_dir = self.input_dir_var.get()
        output_dir = self.output_dir_var.get()
        selected_separator = self.separator_var.get()
        selected_connector = self.connector_var.get()

        # 檢查輸入文件夾是否存在
        if not os.path.isdir(input_dir):
            messagebox.showerror("錯(cuò)誤", f"輸入文件夾不存在:\n{input_dir}")
            return

        # 獲取輸入目錄下所有圖片文件
        image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp']
        image_files = [f for f in os.listdir(input_dir)
                       if os.path.isfile(os.path.join(input_dir, f)) and
                       os.path.splitext(f)[1].lower() in image_extensions]

        if not image_files:
            messagebox.showinfo("提示", f"輸入文件夾中沒(méi)有找到圖片文件:\n{input_dir}")
            return

        # 創(chuàng)建輸出文件夾
        try:
            os.makedirs(output_dir, exist_ok=True)
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"無(wú)法創(chuàng)建輸出文件夾:\n{output_dir}\n錯(cuò)誤: {str(e)}")
            return

        # 創(chuàng)建記錄文件
        record_file = os.path.join(output_dir, 'rename_records.txt')

        try:
            with open(record_file, 'w', encoding='utf-8') as f:
                for index, old_name in enumerate(sorted(image_files), start=1):
                    # 獲取文件名和擴(kuò)展名
                    old_base, ext = os.path.splitext(old_name)
                    # 構(gòu)建新文件名
                    new_name = f"{prefix}{selected_separator}{index}{ext}"

                    # 復(fù)制文件到輸出文件夾并重命名
                    old_path = os.path.join(input_dir, old_name)
                    new_path = os.path.join(output_dir, new_name)
                    shutil.copy2(old_path, new_path)

                    # 寫(xiě)入記錄(只保留原始文件名,不含擴(kuò)展名)
                    f.write(f"{new_name}{selected_connector}{old_base}\n")

            messagebox.showinfo("完成", f"已成功重命名 {len(image_files)} 個(gè)圖片文件。\n輸出目錄: {output_dir}")
        except Exception as e:
            messagebox.showerror("錯(cuò)誤", f"處理過(guò)程中發(fā)生錯(cuò)誤:\n{str(e)}")


if __name__ == "__main__":
    root = tk.Tk()
    app = ImageRenamerApp(root)
    root.mainloop()

效果圖 

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

相關(guān)文章

  • 基于Django模板中的數(shù)字自增(詳解)

    基于Django模板中的數(shù)字自增(詳解)

    下面小編就為大家?guī)?lái)一篇基于Django模板中的數(shù)字自增(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 基于Python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲的示例代碼

    基于Python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲的示例代碼

    植物大戰(zhàn)僵尸是一款經(jīng)典的塔防類游戲,玩家通過(guò)種植各種植物來(lái)抵御僵尸的攻擊,本文將詳細(xì)介紹如何使用Python和Pygame庫(kù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的植物大戰(zhàn)僵尸游戲,文中通過(guò)代碼示例講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-10-10
  • python中的變量與內(nèi)存用法

    python中的變量與內(nèi)存用法

    這篇文章主要介紹了python變量與內(nèi)存用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Pytorch中torch.nn.**和torch.nn.functional.**的區(qū)別

    Pytorch中torch.nn.**和torch.nn.functional.**的區(qū)別

    本文主要介紹了Pytorch中torch.nn.**和torch.nn.functional的區(qū)別,torch.nn.**是一個(gè)繼承的類,需要構(gòu)造對(duì)象后再調(diào)用,而torch.nn.functional是純數(shù)學(xué)函數(shù),可以直接使用,下面就來(lái)詳細(xì)的介紹一下
    2024-11-11
  • Python性能優(yōu)化之讓你的代碼運(yùn)行速度提升10倍的技巧分享

    Python性能優(yōu)化之讓你的代碼運(yùn)行速度提升10倍的技巧分享

    在日常開(kāi)發(fā)中,我們常常會(huì)遇到Python代碼運(yùn)行緩慢的問(wèn)題,通過(guò)一些巧妙的優(yōu)化技巧,我們完全可以讓代碼的運(yùn)行速度提升數(shù)倍甚至數(shù)十倍,下面小編就為大家介紹一下吧
    2025-11-11
  • python簡(jiǎn)單實(shí)現(xiàn)獲取當(dāng)前時(shí)間

    python簡(jiǎn)單實(shí)現(xiàn)獲取當(dāng)前時(shí)間

    最近項(xiàng)目中經(jīng)常需要python去取當(dāng)前的時(shí)間,雖然不是很難,但是老是忘記,用一次丟一次,為了能夠更好的記住,我今天特意寫(xiě)下python 當(dāng)前時(shí)間這篇文章,如果你覺(jué)的對(duì)你有用的話,可以收藏下。
    2016-08-08
  • Python切圖九宮格的實(shí)現(xiàn)方法

    Python切圖九宮格的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python切圖九宮格的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Pycharm-community-2020.2.3 社區(qū)版安裝教程圖文詳解

    Pycharm-community-2020.2.3 社區(qū)版安裝教程圖文詳解

    這篇文章主要介紹了Pycharm-community-2020.2.3 社區(qū)版安裝教程圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 對(duì)Django 中request.get和request.post的區(qū)別詳解

    對(duì)Django 中request.get和request.post的區(qū)別詳解

    今天小編就為大家分享一篇對(duì)Django 中request.get和request.post的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python修改列表值問(wèn)題解決方案

    Python修改列表值問(wèn)題解決方案

    這篇文章主要介紹了Python修改列表值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

孙吴县| 安化县| 黄龙县| 门头沟区| 中卫市| 浦江县| 江城| 庆安县| 饶平县| 长宁县| 栾城县| 广灵县| 抚顺县| 宁化县| 大洼县| 洪泽县| 芦溪县| 常熟市| 高邑县| 定结县| 岗巴县| 曲阜市| 垫江县| 宜昌市| 尤溪县| 定兴县| 页游| 个旧市| 北碚区| 兴城市| 铜川市| 阿城市| 兴业县| 陵川县| 栖霞市| 青河县| 浏阳市| 马公市| 九江市| 四川省| 天气|