吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 693|回复: 16
收起左侧

[讨论] 用copilot写的文件重命名器

[复制链接]
sin2019 发表于 2024-10-21 11:46
用copilot写的文件重命名器,源码直接放出来  先读取修改文件的文件夹    然后读取excle文件  excle文件是旧名字和新名字的对照关系  
import os
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
def rename_files(file_mapping, log_file):
    """
    根据文件映射关系重命名文件,并记录日志。
    :param file_mapping: 文件名映射字典,键为旧文件名,值为新文件名。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for old_name, new_name in file_mapping.items():
                for file in os.listdir():
                    file_base, file_ext = os.path.splitext(file)
                    old_base, old_ext = os.path.splitext(old_name)
                    if file_base == old_base:
                        new_file = new_name if '.' in new_name else new_name + file_ext
                        os.rename(file, new_file)
                        log.write(f"Renamed {file} to {new_file}\n")
                        print(f"Renamed {file} to {new_file}")
            messagebox.showinfo("成功", "文件已成功重命名。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")
def delete_substring_from_files(directory, substring, log_file):
    """
    从文件名中删除指定的子字符串,并记录日志。
    :param directory: 文件所在目录。
    :param substring: 要删除的子字符串。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for root, _, files in os.walk(directory):
                for file in files:
                    if substring in file:
                        new_name = file.replace(substring, "")
                        old_name = os.path.join(root, file)
                        new_name = os.path.join(root, new_name)
                        os.rename(old_name, new_name)
                        log.write(f"Renamed {old_name} to {new_name}\n")
                        print(f"Renamed {old_name} to {new_name}")
            messagebox.showinfo("成功", "子字符串已成功从文件中删除。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")
def change_file_extension(directory, old_ext, new_ext, log_file):
    """
    批量修改文件后缀,并记录日志。
    :param directory: 文件所在目录。
    :param old_ext: 旧的文件后缀。
    :param new_ext: 新的文件后缀。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for root, _, files in os.walk(directory):
                for file in files:
                    if file.endswith(old_ext):
                        base = os.path.splitext(file)[0]
                        new_name = base + new_ext
                        old_name = os.path.join(root, file)
                        new_name = os.path.join(root, new_name)
                        os.rename(old_name, new_name)
                        log.write(f"Changed extension of {old_name} to {new_name}\n")
                        print(f"Changed extension of {old_name} to {new_name}")
            messagebox.showinfo("成功", "文件后缀已成功修改。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")
def select_directory():
    """
    选择要操作的目录。
    """
    directory = filedialog.askdirectory()
    if directory:
        directory_entry.delete(0, tk.END)
        directory_entry.insert(0, directory)
def load_excel():
    """
    加载包含文件名映射关系的 Excel 文件。
    """
    file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls")])
    if file_path:
        try:
            df = pd.read_excel(file_path)
            for index, row in df.iterrows():
                old_name = str(row[0])
                new_name = str(row[1])
                file_mapping[old_name] = new_name
                mapping_listbox.insert(tk.END, f"{old_name} -> {new_name}")
            messagebox.showinfo("成功", "Excel 文件已成功加载。")
        except Exception as e:
            messagebox.showerror("错误", f"加载 Excel 文件时出错: {e}")
def clear_mappings():
    """
    清空文件名映射关系。
    """
    file_mapping.clear()
    mapping_listbox.delete(0, tk.END)
    messagebox.showinfo("成功", "文件名映射关系已清空。")
def start_renaming():
    """
    开始重命名文件。
    """
    directory = directory_entry.get()
    if directory:
        os.chdir(directory)
        rename_files(file_mapping, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录")
def start_deleting():
    """
    开始删除文件名中的指定子字符串。
    """
    directory = directory_entry.get()
    substring = substring_entry.get()
    if directory and substring:
        delete_substring_from_files(directory, substring, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录并输入要删除的子字符串")
def start_changing_extension():
    """
    开始批量修改文件后缀。
    """
    directory = directory_entry.get()
    old_ext = old_ext_entry.get()
    new_ext = new_ext_entry.get()
    if directory and old_ext and new_ext:
        change_file_extension(directory, old_ext, new_ext, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录并输入旧后缀和新后缀")
# 初始化文件名映射字典
file_mapping = {}
# 创建主窗口
root = tk.Tk()
root.title("文件重命名器")
# 选择目录
tk.Label(root, text="选择重命名文件目录:").grid(row=0, column=0, padx=10, pady=10)
directory_entry = tk.Entry(root, width=50)
directory_entry.grid(row=0, column=1, padx=10, pady=10)
tk.Button(root, text="浏览", command=select_directory).grid(row=0, column=2, padx=10, pady=10)
# 加载 Excel 文件
tk.Button(root, text="加载重命名对照 Excel 文件", command=load_excel).grid(row=1, columnspan=3, pady=10)
# 显示映射关系
mapping_listbox = tk.Listbox(root, width=50)
mapping_listbox.grid(row=2, columnspan=3, padx=10, pady=10)
# 清空映射关系按钮
tk.Button(root, text="清空对照关系", command=clear_mappings).grid(row=3, columnspan=3, pady=10)
# 删除子字符串
tk.Label(root, text="输入要删除的子字符串:").grid(row=4, column=0, padx=10, pady=10)
substring_entry = tk.Entry(root)
substring_entry.grid(row=4, column=1, padx=10, pady=10)
tk.Button(root, text="删除子字符串", command=start_deleting).grid(row=4, column=2, padx=10, pady=10)
# 修改文件后缀
tk.Label(root, text="输入旧后缀:(后缀前面加点例如.png)").grid(row=5, column=0, padx=10, pady=10)
old_ext_entry = tk.Entry(root)
old_ext_entry.grid(row=5, column=1, padx=10, pady=10)
tk.Label(root, text="输入新后缀:(后缀前面加点例如.png)").grid(row=6, column=0, padx=10, pady=10)
new_ext_entry = tk.Entry(root)
new_ext_entry.grid(row=6, column=1, padx=10, pady=10)
tk.Button(root, text="修改文件后缀", command=start_changing_extension).grid(row=6, column=2, padx=10, pady=10)
# 重命名按钮
tk.Button(root, text="重命名文件", command=start_renaming).grid(row=7, columnspan=3, pady=20)
# 运行应用程序
root.mainloop()

界面图

界面图

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
cao777 + 1 我很赞同!
深渊莫冥 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| sin2019 发表于 2024-10-21 11:48
本帖最后由 sin2019 于 2024-10-21 15:00 编辑

根据excle的对照关系 进行重命名  然后再追加了 删除名字里面某些特定的字符串还有修改文件后缀功能   下载链接123盘  有pyinstaller封装的exe文件  还有py源文件   https://www.123pan.com/s/sR5xjv-GPZLH
知心 发表于 2024-10-21 12:37
用代码标记包一下,方便阅读
[Python] 纯文本查看 复制代码
import os
import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd


def rename_files(file_mapping, log_file):
    """
    根据文件映射关系重命名文件,并记录日志。
    :param file_mapping: 文件名映射字典,键为旧文件名,值为新文件名。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for old_name, new_name in file_mapping.items():
                for file in os.listdir():
                    file_base, file_ext = os.path.splitext(file)
                    old_base, old_ext = os.path.splitext(old_name)
                    if file_base == old_base:
                        new_file = new_name if '.' in new_name else new_name + file_ext
                        os.rename(file, new_file)
                        log.write(f"Renamed {file} to {new_file}\n")
                        print(f"Renamed {file} to {new_file}")
            messagebox.showinfo("成功", "文件已成功重命名。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")


def delete_substring_from_files(directory, substring, log_file):
    """
    从文件名中删除指定的子字符串,并记录日志。
    :param directory: 文件所在目录。
    :param substring: 要删除的子字符串。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for root, _, files in os.walk(directory):
                for file in files:
                    if substring in file:
                        new_name = file.replace(substring, "")
                        old_name = os.path.join(root, file)
                        new_name = os.path.join(root, new_name)
                        os.rename(old_name, new_name)
                        log.write(f"Renamed {old_name} to {new_name}\n")
                        print(f"Renamed {old_name} to {new_name}")
            messagebox.showinfo("成功", "子字符串已成功从文件中删除。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")


def change_file_extension(directory, old_ext, new_ext, log_file):
    """
    批量修改文件后缀,并记录日志。
    :param directory: 文件所在目录。
    :param old_ext: 旧的文件后缀。
    :param new_ext: 新的文件后缀。
    :param log_file: 日志文件路径。
    """
    try:
        with open(log_file, 'a') as log:
            for root, _, files in os.walk(directory):
                for file in files:
                    if file.endswith(old_ext):
                        base = os.path.splitext(file)[0]
                        new_name = base + new_ext
                        old_name = os.path.join(root, file)
                        new_name = os.path.join(root, new_name)
                        os.rename(old_name, new_name)
                        log.write(
                            f"Changed extension of {old_name} to {new_name}\n")
                        print(f"Changed extension of {old_name} to {new_name}")
            messagebox.showinfo("成功", "文件后缀已成功修改。")
    except Exception as e:
        messagebox.showerror("错误", f"错误: {e}")
        print(f"Error: {e}")


def select_directory():
    """
    选择要操作的目录。
    """
    directory = filedialog.askdirectory()
    if directory:
        directory_entry.delete(0, tk.END)
        directory_entry.insert(0, directory)


def load_excel():
    """
    加载包含文件名映射关系的 Excel 文件。
    """
    file_path = filedialog.askopenfilename(
        filetypes=[("Excel files", "*.xlsx;*.xls")])
    if file_path:
        try:
            df = pd.read_excel(file_path)
            for index, row in df.iterrows():
                old_name = str(row[0])
                new_name = str(row[1])
                file_mapping[old_name] = new_name
                mapping_listbox.insert(tk.END, f"{old_name} -> {new_name}")
            messagebox.showinfo("成功", "Excel 文件已成功加载。")
        except Exception as e:
            messagebox.showerror("错误", f"加载 Excel 文件时出错: {e}")


def clear_mappings():
    """
    清空文件名映射关系。
    """
    file_mapping.clear()
    mapping_listbox.delete(0, tk.END)
    messagebox.showinfo("成功", "文件名映射关系已清空。")


def start_renaming():
    """
    开始重命名文件。
    """
    directory = directory_entry.get()
    if directory:
        os.chdir(directory)
        rename_files(file_mapping, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录")


def start_deleting():
    """
    开始删除文件名中的指定子字符串。
    """
    directory = directory_entry.get()
    substring = substring_entry.get()
    if directory and substring:
        delete_substring_from_files(directory, substring, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录并输入要删除的子字符串")


def start_changing_extension():
    """
    开始批量修改文件后缀。
    """
    directory = directory_entry.get()
    old_ext = old_ext_entry.get()
    new_ext = new_ext_entry.get()
    if directory and old_ext and new_ext:
        change_file_extension(directory, old_ext, new_ext, 'rename_log.txt')
    else:
        messagebox.showerror("错误", "请选择一个目录并输入旧后缀和新后缀")


# 初始化文件名映射字典
file_mapping = {}
# 创建主窗口
root = tk.Tk()
root.title("文件重命名器")
# 选择目录
tk.Label(root, text="选择重命名文件目录:").grid(row=0, column=0, padx=10, pady=10)
directory_entry = tk.Entry(root, width=50)
directory_entry.grid(row=0, column=1, padx=10, pady=10)
tk.Button(root, text="浏览", command=select_directory).grid(
    row=0, column=2, padx=10, pady=10)
# 加载 Excel 文件
tk.Button(root, text="加载重命名对照 Excel 文件", command=load_excel).grid(
    row=1, columnspan=3, pady=10)
# 显示映射关系
mapping_listbox = tk.Listbox(root, width=50)
mapping_listbox.grid(row=2, columnspan=3, padx=10, pady=10)
# 清空映射关系按钮
tk.Button(root, text="清空对照关系", command=clear_mappings).grid(
    row=3, columnspan=3, pady=10)
# 删除子字符串
tk.Label(root, text="输入要删除的子字符串:").grid(row=4, column=0, padx=10, pady=10)
substring_entry = tk.Entry(root)
substring_entry.grid(row=4, column=1, padx=10, pady=10)
tk.Button(root, text="删除子字符串", command=start_deleting).grid(
    row=4, column=2, padx=10, pady=10)
# 修改文件后缀
tk.Label(root, text="输入旧后缀:(后缀前面加点例如.png)").grid(
    row=5, column=0, padx=10, pady=10)
old_ext_entry = tk.Entry(root)
old_ext_entry.grid(row=5, column=1, padx=10, pady=10)
tk.Label(root, text="输入新后缀:(后缀前面加点例如.png)").grid(
    row=6, column=0, padx=10, pady=10)
new_ext_entry = tk.Entry(root)
new_ext_entry.grid(row=6, column=1, padx=10, pady=10)
tk.Button(root, text="修改文件后缀", command=start_changing_extension).grid(
    row=6, column=2, padx=10, pady=10)
# 重命名按钮
tk.Button(root, text="重命名文件", command=start_renaming).grid(
    row=7, columnspan=3, pady=20)
# 运行应用程序
root.mainloop()
13729181580 发表于 2024-10-21 14:32
 楼主| sin2019 发表于 2024-10-21 14:43
知心 发表于 2024-10-21 12:37
用代码标记包一下,方便阅读
[mw_shl_code=python,true]import os
import tkinter as tk

感谢 第一次发帖 直接发了 没有在意格式
cao777 发表于 2024-10-21 17:08
本帖最后由 cao777 于 2024-10-21 17:14 编辑

用vscode调试后 直接出现了界面 很棒
想请教下 怎么能把这个源码 打包生成可以执行的应用程序 谢谢
用什么能打包成应用程序界面呢
谢谢!
 楼主| sin2019 发表于 2024-10-21 17:25
cao777 发表于 2024-10-21 17:08
用vscode调试后 直接出现了界面 很棒
想请教下 怎么能把这个源码 打包生成可以执行的应用程序 谢谢
用什 ...

1楼的 里面我放了 123盘的下载链接 里面有pyinstaller命令封装的exe文件 打包执行文件 pyinstaller命令可以打包。就是包有点大100多m
d199212 发表于 2024-10-22 08:13
全部都是copilot写的?
cao777 发表于 2024-10-22 10:39
本帖最后由 cao777 于 2024-10-22 10:47 编辑
sin2019 发表于 2024-10-21 17:25
1楼的 里面我放了 123盘的下载链接 里面有pyinstaller命令封装的exe文件 打包执行文件 pyinstaller命令可 ...

先pip install pyinstaller 安装这个包
然后pyinstaller 1.py生成程序


进入1.py同目录的dist文件夹下 有个1.ex和一个文件夹
打开1.exe 正常运行了 但是有个命令框
如何让他变成单文件可正常运行的呢

谢谢
如何用pyinstaller命令打包呢
在cmd界面 直接pyinstaller x.py这样?
 楼主| sin2019 发表于 2024-10-23 00:36
d199212 发表于 2024-10-22 08:13
全部都是copilot写的?

如果硬说的话,百分之99是。功能从简单到复杂的过程中,copliot对后缀的参照关系经常变动,所以临时手改了一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 22:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表