Deepseek+inscode生成了一个可以任意批量改指定目录文件名的代码

查看 101|回复 10
作者:pj2015   
论坛里有一个网友发过类似的代码,但没我需要的功能:批量去掉指定目录所有文件名中非中文字符。网上好像也没有。今天也很激动,经过半小时候左右的沟通,修改,deepseek帮我完成了想要的功能。马上和大家分享。
[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,几乎一窍不通。不喜勿喷。

重命名, 文件名

walykyy   

现在ai确实强大,不过还需要有一定的基础再用最好了,不然基础打不好
tf0721   

D:\MyFile>py Rename.py
  File "D:\MyFile\Rename.py", line 82
    for file in self.files:
                          ^
SyntaxError: invalid syntax
错误的参数?
ningm   

支持一下
chenzhigang   

学习一下
18827106315   

这个代码怎么使用
52pjcn   


walykyy 发表于 2025-5-20 13:37
现在ai确实强大,不过还需要有一定的基础再用最好了,不然基础打不好

同意,有一点基础,更好编制prompt,修改代码
AiniWang   


18827106315 发表于 2025-5-20 14:02
这个代码怎么使用

新建一个main.py的文件,复制粘贴楼主给出的代码,安装python环境,cmd窗口运行py main.py
qpqp1414   

学习一下
pj2015
OP
  


walykyy 发表于 2025-5-20 13:37
现在ai确实强大,不过还需要有一定的基础再用最好了,不然基础打不好

已经开始抽时间在学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部