[color=]values
[color=]=[
[color=]"添加前缀"
[color=],
[color=]"添加后缀"
[color=],
[color=]"替换字符串"
[color=],
[color=]"正则表达式"
[color=],
[color=]"删除非中文字符"
[color=]])
其它功能是deepseek默认生成的。
以下是代码:[Python] 纯文本查看 复制代码import os
import re
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
class FileRenamerApp:
def __init__(self, root):
self.root = root
self.root.title("批量文件重命名工具")
# 目录选择部分
self.dir_frame = tk.LabelFrame(root, text="选择目录")
self.dir_frame.pack(padx=10, pady=5, fill="x")
self.dir_entry = tk.Entry(self.dir_frame)
self.dir_entry.pack(side="left", expand=True, fill="x", padx=5)
self.browse_btn = tk.Button(self.dir_frame, text="浏览...", command=self.browse_directory)
self.browse_btn.pack(side="right", padx=5)
# 重命名选项部分
self.options_frame = tk.LabelFrame(root, text="重命名选项")
self.options_frame.pack(padx=10, pady=5, fill="x")
# 下拉菜单替代单选按钮
tk.Label(self.options_frame, text="选择重命名方式:").grid(row=0, column=0, sticky="w")
self.rename_option = tk.StringVar(value="添加前缀")
self.option_menu = ttk.Combobox(self.options_frame, textvariable=self.rename_option,
values=["添加前缀", "添加后缀", "替换字符串", "正则表达式", "删除非中文字符"])
self.option_menu.grid(row=0, column=1, padx=5, sticky="ew")
self.option_menu.bind(">", self.update_option_fields)
# 输入框容器
self.input_frame = tk.Frame(self.options_frame)
self.input_frame.grid(row=1, column=0, columnspan=2, padx=5, pady=5, sticky="ew")
# 第一个输入框
self.option_entry = tk.Entry(self.input_frame)
self.option_entry.pack(fill="x")
# 第二个输入框(用于替换操作)
self.option_entry2 = tk.Entry(self.input_frame)
self.option_entry2.pack(fill="x")
self.option_entry2.pack_forget() # 默认隐藏
# 文件列表预览
self.preview_frame = tk.LabelFrame(root, text="文件列表")
self.preview_frame.pack(padx=10, pady=5, expand=True, fill="both")
self.tree = ttk.Treeview(self.preview_frame, columns=("new_name"), show="headings")
self.tree.heading("#0", text="原文件名")
self.tree.heading("new_name", text="新文件名")
self.tree.pack(expand=True, fill="both")
# 操作按钮
self.btn_frame = tk.Frame(root)
self.btn_frame.pack(padx=10, pady=5, fill="x")
self.preview_btn = tk.Button(self.btn_frame, text="预览", command=self.preview_changes)
self.preview_btn.pack(side="left", padx=5)
self.execute_btn = tk.Button(self.btn_frame, text="执行重命名", command=self.execute_rename)
self.execute_btn.pack(side="right", padx=5)
def browse_directory(self):
directory = filedialog.askdirectory()
if directory:
self.dir_entry.delete(0, tk.END)
self.dir_entry.insert(0, directory)
self.load_files(directory)
def update_option_fields(self, event=None):
option = self.rename_option.get()
if option in ["替换字符串", "正则表达式"]:
self.option_entry2.pack(fill="x")
else:
self.option_entry2.pack_forget()
def load_files(self, directory):
self.files = [f for f in os.listdir(directory) if
self.tree.delete(*self.tree.get_children())
for file in self.files:
self.tree.insert("", "end", text=file, values=("",))
def preview_changes(self):
directory = self.dir_entry.get()
if not directory or not os.path.isdir(directory):
messagebox.showerror("错误", "请选择有效的目录")
return
option = self.rename_option.get()
param1 = self.option_entry.get()
param2 = self.option_entry2.get() if option in ["替换字符串", "正则表达式"] else ""
new_names = []
for file in self.files:
if option == "添加前缀":
new_name = param1 + file
elif option == "添加后缀":
name, ext = os.path.splitext(file)
new_name = name + param1 + ext
elif option == "替换字符串":
new_name = file.replace(param1, param2)
elif option == "正则表达式":
try:
new_name = re.sub(param1, param2, file)
except re.error:
messagebox.showerror("错误", "无效的正则表达式")
return
elif option == "删除非中文字符":
# 保留中文字符和文件扩展名
name, ext = os.path.splitext(file)
# 匹配所有中文字符 [\u4e00-\u9fa5]
new_name = "".join(re.findall(r'[\u4e00-\u9fa5', name)) + ext
else:
return
new_names.append(new_name)
# 更新树状图
for item, new_name in zip(self.tree.get_children(), new_names):
self.tree.item(item, values=(new_name,))
def execute_rename(self):
directory = self.dir_entry.get()
if not directory or not os.path.isdir(directory):
messagebox.showerror("错误", "请选择有效的目录")
return
if not messagebox.askyesno("确认", "确定要执行重命名操作吗?"):
return
for item in self.tree.get_children():
old_name = self.tree.item(item)["text"
new_name = self.tree.item(item)["values"][0
if new_name: # 确保有新文件名
try:
os.rename(
os.path.join(directory, old_name),
os.path.join(directory, new_name)
)
except Exception as e:
messagebox.showerror("错误", f"重命名失败: {str(e)}")
return
messagebox.showinfo("成功", "文件重命名完成!")
self.load_files(directory) # 刷新文件列表
if __name__ == "__main__":
root = tk.Tk()
app = FileRenamerApp(root)
root.mainloop()
申明:本人才开始学习python,几乎一窍不通。不喜勿喷。