以下は『終刻解放・無限断章:肢』のソースコード全文です:
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()