|
Python生成指定后缀的文件-程序 最终版代码:
import os import tkinter as tk from tkinter import ttk, messagebox
def select_parameters(): global confirmed, suffix, prefix, num_files confirmed = False # 初始化确认状态
def on_entry_focus_in(event): if entry_prefix.get() == placeholder_text: entry_prefix.delete(0, tk.END) entry_prefix.configure(style='TEntry') def on_entry_focus_out(event): if not entry_prefix.get(): entry_prefix.insert(0, placeholder_text) entry_prefix.configure(style='Placeholder.TEntry') def validate_inputs(): """验证所有输入是否有效""" # 验证集数输入 try: num = int(entry_num.get()) if not (1 <= num <= 99): raise ValueError except ValueError: messagebox.showerror("错误", "请输入1-99之间的有效整数") return False # 验证节目名称输入 raw_prefix = entry_prefix.get() if raw_prefix.strip() == "" or raw_prefix == placeholder_text: messagebox.showerror("错误", "请输入有效的节目名称") return False return True def on_confirm(): """确认按钮处理函数""" global confirmed, suffix, prefix, num_files if not validate_inputs(): return # 输入验证失败时不执行后续操作 # 获取有效输入值 num_files = int(entry_num.get()) raw_prefix = entry_prefix.get().strip() # 处理非法字符(新增代码) invalid_chars = r'\/:*?"<>|' # Windows系统非法字符 processed_prefix = raw_prefix.rstrip('.E') # 去除尾部.E processed_prefix = ''.join([c for c in processed_prefix if c not in invalid_chars]) # 过滤非法字符 # 确保处理后名称有效(新增验证) if not processed_prefix: messagebox.showerror("错误", "名称包含过多非法字符,请输入有效名称") return prefix = processed_prefix # 更新全局变量 suffix = ext_var.get() confirmed = True root.quit() root.destroy() def on_exit(): """退出按钮处理函数""" global confirmed confirmed = False root.quit() root.destroy() # 创建主窗口 root = tk.Tk() root.title("文件生成设置") root.geometry("420x220") root.resizable(False, False)
# 样式配置 style = ttk.Style() style.configure('Placeholder.TEntry', foreground='gray') # 主容器 frame = ttk.Frame(root, padding=12) frame.pack(expand=True, fill='both')
# 文件名前缀输入组件 placeholder_text = "请输入文件名称" ttk.Label(frame, text="节目名称:", font=('微软雅黑', 9)).grid(row=0, column=0, sticky='w', pady=3) entry_prefix = ttk.Entry(frame, width=28, style='Placeholder.TEntry') entry_prefix.insert(0, placeholder_text) entry_prefix.grid(row=0, column=1, columnspan=2, sticky='ew', padx=5) entry_prefix.bind('<FocusIn>', on_entry_focus_in) entry_prefix.bind('<FocusOut>', on_entry_focus_out) # 示例提示 ttk.Label(frame, text="示例:输入'HH' → 生成 HH.E01.mkv", foreground="gray", font=('微软雅黑', 8)).grid(row=1, column=1, sticky='w')
# 集数输入组件 ttk.Label(frame, text="生成集数:", font=('微软雅黑', 9)).grid(row=2, column=0, sticky='w', pady=3) entry_num = ttk.Entry(frame, width=8) entry_num.insert(0, '10') entry_num.grid(row=2, column=1, sticky='w', padx=5) ttk.Label(frame, text="集(1-99)", font=('微软雅黑', 9)).grid(row=2, column=2, sticky='w')
# 文件格式选择组件 ttk.Label(frame, text="视频格式:", font=('微软雅黑', 9)).grid(row=3, column=0, sticky='w', pady=10) ext_var = tk.StringVar(value='.mp4') btn_frame = ttk.Frame(frame) btn_frame.grid(row=3, column=1, columnspan=2, sticky='w') ttk.Radiobutton(btn_frame, text="MP4", variable=ext_var, value='.mp4').pack(side='left', padx=6) ttk.Radiobutton(btn_frame, text="MKV", variable=ext_var, value='.mkv').pack(side='left', padx=6)
# 操作按钮容器 btn_container = ttk.Frame(frame) btn_container.grid(row=4, column=0, columnspan=3, pady=12, sticky='e') # 退出按钮 ttk.Button(btn_container, text="退出程序", command=on_exit, width=10).pack(side='right', padx=5) # 生成按钮 ttk.Button(btn_container, text="立即生成", command=on_confirm, width=10).pack(side='right')
root.mainloop()
# 初始化全局变量 confirmed = False suffix = '.mkv' prefix = '未命名节目' num_files = 1
# 运行参数设置界面 select_parameters()
# 根据用户选择执行操作 if confirmed: # 创建目标文件夹(路径已修改) folder = f"D:/电视剧/{prefix}(2025-1)" # 动态生成路径,新增固定后缀 os.makedirs(folder, exist_ok=True)
# 批量创建文件 created_count = 0 for i in range(1, num_files + 1): try: filename = f"{prefix}.E{i:02d}{suffix}" filepath = os.path.join(folder, filename) with open(filepath, 'w') as file: created_count += 1 except Exception as e: print(f"⚠️ 创建文件 {filename} 失败: {str(e)}")
# 输出结果报告 print(f"🎉 成功创建 {created_count} 个视频文件!\n" f"📁 保存路径:{os.path.abspath(folder)}\n" f"📄 命名格式:{prefix}.E01{suffix}") else: print("操作已取消,未生成任何文件。")
END
|