ファイル名一括リネームツール『黄昏の宣告者』 ソースコード

『黄昏の宣告者』はCSVファイルの内容に従って、指定フォルダ内のファイル名を一括で変更するツールです。

>>GUI外観 >>使い方

以下は『黄昏の宣告者』のソースコード全文です:

 
        import os
        import csv
        import tkinter as tk
        from tkinter import filedialog, messagebox, scrolledtext
        
        def select_folder():
            folder = filedialog.askdirectory()
            if folder:
                folder_var.set(folder)
        
        def select_csv():
            file_path = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv")])
            if file_path:
                csv_var.set(file_path)
        
        def clear_log():
            log_text.config(state='normal')
            log_text.delete(1.0, tk.END)
            log_text.config(state='disabled')
        
        def log(message):
            log_text.config(state='normal')
            log_text.insert(tk.END, message + '\n')
            log_text.see(tk.END)
            log_text.config(state='disabled')
        
        def rename_files():
            folder = folder_var.get()
            csv_path = csv_var.get()
        
            clear_log()
        
            if not os.path.isdir(folder):
                messagebox.showerror("エラー", "有効なフォルダを選択してください。")
                return
        
            if not os.path.isfile(csv_path):
                messagebox.showerror("エラー", "有効なCSVファイルを選択してください。")
                return
        
            try:
                with open(csv_path, newline='', encoding='utf-8') as csvfile:
                    reader = csv.reader(csvfile)
                    count = 0
                    for row in reader:
                        if len(row) < 2:
                            log(f"スキップ: 列数が不足しています → {row}")
                            continue
        
                        old_name = row[0].strip()
                        new_name = row[1].strip()
        
                        if not old_name or not new_name:
                            log(f"スキップ: 不正なデータ → {row}")
                            continue
        
                        old_path = os.path.join(folder, old_name)
                        new_path = os.path.join(folder, new_name)
        
                        if os.path.exists(old_path):
                            os.rename(old_path, new_path)
                            log(f"{old_name} → {new_name} に変更しました")
                            count += 1
                        else:
                            log(f"{old_name} は存在しません")
        
                    log("---")
                    log(f"以上、{count} 件のファイル名を変更しました。")
                    messagebox.showinfo("完了", f"{count} 件のファイル名を変更しました。")
        
            except Exception as e:
                messagebox.showerror("エラー", f"リネーム中にエラーが発生しました:\n{str(e)}")
        
        # GUIの作成
        root = tk.Tk()
        root.title("ファイル名一括リネームツール - 黄昏の宣告者")
        
        ##タイトルバーアイコン表示用
        data = '''R0lGODdhEAAQAIYAAP///////v7+/f79/P38+/v6+fj39vb19PX18/Dw7+/u7erp6Ono5+jn5ubl5OXl5OPj4t3d3Nzc29bW1dXU09PT0tLS0dLR0MvLysjHx8TEw8TDw8PDw8LCwcHBwMC/v76+vby8u7u6urq6ubi4t7e3tra1tbS0s7OzsrKysbKxsbCwsLCvr6+vr6+vrq+urq6uraysq6uqqqqqqqqpqampqaiop6enpqampqSkpKSjo6GhoaCgoKCfn5+fnp6enp6dnZ2dnZ2cnJubmpmZmZmZmJaWlZWVlZSUlJKSkpKRkZCQkI+Pj46Ojo2NjYyMjIqKiomJiYeHh4aGhoWFhYSEhISEg4ODg4KCgoGBgYCAgH9/f35+fn19fXx8fHt8fHt7e3p6e3p6enl5eXh4eHd3d3Z3d3V2dnV1dXR1dXFxcXBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAEAI1wCxCBwoMAuXLVUSCrziBYUMNCYoOLmywwSULFcGXtkyg4SGHGtcADBgoECCKFoWamFSogoTH2Ba/OiSkeCVK2O2gIEhQAEGDB6qZFkY4wiGDxWGjKGS8MpQLFe4AIHQQUqKEUSU6PBS0yYXLjxoVOFKsKwVp1OQNAkjBozNL2Jc/CijYsABAgEQoITqZcGGMzUmgGjg4AGDCFOyVBlzQUKMJ2RovBDiZUvZKmZ6cLAQAqWQDDfAdMVSBcySImmM2FCTBAdZm1uSrDghgkUQy2U1MhSDsWxAADs=''' 
        root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(data=data))
        ####
        
        folder_var = tk.StringVar()
        csv_var = tk.StringVar()
        
        tk.Label(root, text="フォルダ選択").pack()
        tk.Entry(root, textvariable=folder_var, width=60).pack(padx=5, pady=2)
        tk.Button(root, text="フォルダを選択", command=select_folder).pack(pady=2)
        
        tk.Label(root, text="CSVファイル選択").pack()
        tk.Entry(root, textvariable=csv_var, width=60).pack(padx=5, pady=2)
        tk.Button(root, text="CSVを選択", command=select_csv).pack(pady=2)
        
        tk.Button(root, text="リネーム実行", command=rename_files).pack(pady=10)
        
        # ステータスログ表示エリア
        tk.Label(root, text="ステータス").pack()
        log_text = scrolledtext.ScrolledText(root, width=70, height=15, state='disabled', wrap='word')
        log_text.pack(padx=5, pady=5)
        
        root.mainloop()
        

       
    

📦 ダウンロード 🏠 ホームへ