ファイル名一覧書き出しツール『終刻解放・無限断章:肢』 ソースコード

以下は『終刻解放・無限断章:肢』のソースコード全文です:

 
        import os
        import csv
        import tkinter as tk
        from tkinter import filedialog, messagebox
        from datetime import datetime
        
        class FileListExporter:
            def __init__(self, root):
                self.root = root
                self.root.title("ファイル名一覧書き出しツール - 終刻解放・無限断章:肢")
                self.root.geometry("460x420")
        
                self.prefix_var = tk.StringVar()
                self.mode_var = tk.IntVar(value=0)
                self.format_var = tk.StringVar(value="csv")
                self.folder_path = None
                self.save_folder_path = None
        
                self.create_widgets()
        
            def create_widgets(self):
                pad = {'padx': 10, 'pady': 5}
        
                # 対象フォルダ選択
                tk.Button(self.root, text="フォルダ選択(対象)", command=self.select_folder).pack(**pad)
                self.folder_path_label = tk.Label(self.root, text="未選択", fg="blue", wraplength=400, justify="left")
                self.folder_path_label.pack(**pad)
        
                # 接頭辞入力
                frame_prefix = tk.Frame(self.root)
                tk.Label(frame_prefix, text="接頭辞:").pack(side=tk.LEFT)
                tk.Entry(frame_prefix, textvariable=self.prefix_var, width=25).pack(side=tk.LEFT)
                frame_prefix.pack(**pad)
        
                # 出力形式ラジオボタン(相対パス削除済み)
                frame_radio = tk.Frame(self.root)
                tk.Label(frame_radio, text="出力形式:").pack(anchor="w")
                tk.Radiobutton(frame_radio, text="ファイル名のみ", variable=self.mode_var, value=0).pack(anchor="w")
                tk.Radiobutton(frame_radio, text="絶対パス表示", variable=self.mode_var, value=1).pack(anchor="w")
                frame_radio.pack(**pad)
        
                # 保存形式選択(CSV / TXT)
                frame_format = tk.Frame(self.root)
                tk.Label(frame_format, text="保存形式:").pack(anchor="w")
                tk.Radiobutton(frame_format, text="CSV", variable=self.format_var, value="csv").pack(anchor="w")
                tk.Radiobutton(frame_format, text="TXT", variable=self.format_var, value="txt").pack(anchor="w")
                frame_format.pack(**pad)
        
                # 保存先フォルダ
                tk.Button(self.root, text="保存先フォルダ選択", command=self.select_save_folder).pack(**pad)
                self.save_path_label = tk.Label(self.root, text="未選択", fg="blue", wraplength=400, justify="left")
                self.save_path_label.pack(**pad)
        
                # 出力ボタン
                tk.Button(self.root, text="書き出し", command=self.export_file).pack(pady=15)
        
            def select_folder(self):
                folder = filedialog.askdirectory()
                if folder:
                    self.folder_path = folder
                    self.folder_path_label.config(text=folder)
        
            def select_save_folder(self):
                folder = filedialog.askdirectory()
                if folder:
                    self.save_folder_path = folder
                    self.save_path_label.config(text=folder)
        
            def export_file(self):
                if not self.folder_path:
                    messagebox.showerror("エラー", "対象フォルダが選択されていません。")
                    return
        
                confirm = messagebox.askokcancel("確認", "一覧ファイルを書き出しますか?")
                if not confirm:
                    return
        
                prefix = self.prefix_var.get()
                mode = self.mode_var.get()
                fmt = self.format_var.get()
        
                try:
                    files = [f for f in os.listdir(self.folder_path) if os.path.isfile(os.path.join(self.folder_path, f))]
                    data = []
        
                    for f in files:
                        abs_path = os.path.abspath(os.path.join(self.folder_path, f))
                        value = f if mode == 0 else abs_path
                        data.append(prefix + value)
        
                    folder_name = os.path.basename(self.folder_path)
                    timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
                    filename = f"{folder_name}-{timestamp}.{fmt}"
        
                    if self.save_folder_path:
                        save_path = os.path.join(self.save_folder_path, filename)
                    else:
                        desktop = os.path.join(os.path.expanduser("~"), "Desktop")
                        save_path = os.path.join(desktop, filename)
        
                    with open(save_path, "w", newline="", encoding="utf-8") as file:
                        if fmt == "csv":
                            writer = csv.writer(file)
                            writer.writerow(["ファイル名"])
                            for row in data:
                                writer.writerow([row])
                        else:  # txt
                            for row in data:
                                file.write(row + "\n")
        
                    messagebox.showinfo("完了", f"{fmt.upper()}ファイルを書き出しました:\n{save_path}")
                except Exception as e:
                    messagebox.showerror("エラー", f"処理中にエラーが発生しました:\n{e}")
        
        # 実行
        if __name__ == "__main__":
            root = tk.Tk()
        
            ##タイトルバーアイコン表示用
            data = '''R0lGODdhEAAQAIYAAP////38/fz8/Pb29/X19vX19fT09PPz8/Ly8vLx8vHx8fDw8O/v7+/u7+7u7u7t7uzs7Ovr6+vq6+rq6unp6eno6Ojo6ejo6Ofn5+bm5uTk5OHh4dzb3Nva29fX19TU1NHR0dDQ0M/Pz8vLy8rKysnJycjIyMbGxsXFxcLDw8LCwsHBwcDAwL+/v76+vr29vbu7u7q6urm5ubi4uLe3t7a2trOzs7KysrCwsK+vsK+vr66ur66urq2traysraurq6qqqqampqWlpaSkpaSkpKOjo6CgoJ2dnZmZmZiYmJeXmJaWlpWVlZKSkpCQkI+Pj46Ojo2Njo2NjYyMjIiIiIeHiIaGhoWFhYSEhIODhHNzdGxsbGdnZ2RkZGNjY2JiYl9fX11dXVdXV1NTUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAEAI3AAnCBxI4cABCgMTToCAwogIGVu4lGChJEaEhBIuQDAA4AoWAAYYXEgYAYMHKRyG9GCQg8UTFw0QKsQQQMwYARgUTqCwgISUEyC+WHEwgsmNBwQXxPjhIwQUJyGsFNHBQOZOBwNEaDAxwkEHBQos6Ny5IAWLBVbHZihgwwaBDGkFXjiwgUcQL12OAPlQIOEFAzGE6NgBJgyOFROylEhA4W8MLCiwNCFCpQmSD1VmGLjwl0aUDzeKTImh5QWKJTcKjLRgQEWNIy2SwLgwRQQKBGkpYFAAASwFBxWsBgQAOw==''' 
            root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(data=data))
            ####
        
            app = FileListExporter(root)
            root.mainloop()
               
    

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