一个简单的批量文件重命名运行软件

文章描述了一个用Python编写的程序,通过Tkinter界面帮助办公文员和财务工作者批量重命名文件。程序包括选择文件夹、导出原文件名到Excel、根据Excel中的映射进行文件替换,并处理可能的API缺失错误。
摘要由CSDN通过智能技术生成

对于办公文员以及财务工作者往往要处理很多办公事项,特别是重命名文件名。

下面介绍一个用Python写的一个小程序。

操作方法如下:

  1. 下载文件后,双击运行exe程序。 
  2. 选择需要重命名文件的文件夹路径。

  3. 点击导出原文件名按钮,会在桌面生成一个filename_mapping.xlsx文件。
  4. 打开filename_mapping.xlsx文件之后,会发现第二步上传在文件夹路径中的文件名会显示到表格A列旧文件名中,用户根据需要在B列填写新文件名,填写完之后保存关闭。
  5. 选择刚才填写好修改文件名表格的路径,然后点击开始替换,显示“文件名替换完成”的提示后,点击确定,这样文件名就替换完成了。  
  6. 如果运行错误提示:无法启动此程序,因为计算机中丢失 api-ms-win-core-path-/1-1-0dl尝试重新安装该程序以解决此问题。这个错误信息表明在运行你的Python小程序时,电脑中缺少了名为 “api-ms-win-core-path-/1-1-0dl” 的文件。这通常是由缺少 Windows 系统运行库或者运行库版本不兼容导致的。 进入该网站下载文件:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022
import os
import openpyxl
import tkinter as tk
from tkinter import filedialog, messagebox

# 创建一个继承自tkinter的应用程序类
class FileRenamerApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("文件名批量替换工具")  # 设置应用程序窗口的标题
        self.geometry("500x260")  # 设置应用程序窗口的大小
        self.folder_path = tk.StringVar()  # 文件夹路径,用于存储用户选择的文件夹路径
        self.xlsx_path = tk.StringVar()  # xlsx表格路径,用于存储用户选择的xlsx表格路径
        self.create_widgets()  # 创建应用程序窗口中的控件

    # 创建应用程序窗口中的控件
    def create_widgets(self):
        folder_label = tk.Label(self, text="文件夹路径(需要重命名的文件夹):")  # 文件夹路径的Label标签
        folder_label.pack(pady=5)  # 将标签放置在窗口中,并设置垂直间距

        folder_entry_frame = tk.Frame(self)  # 创建一个Frame容器,用于放置文件夹路径的输入框和选择按钮
        folder_entry_frame.pack()  # 将Frame容器放置在窗口中

        folder_entry = tk.Entry(folder_entry_frame, textvariable=self.folder_path, width=40)  # 创建文件夹路径的输入框
        folder_entry.pack(side=tk.LEFT)  # 将输入框放置在Frame容器的左侧

        folder_button = tk.Button(folder_entry_frame, text="选择文件夹", command=self.select_folder)  # 创建选择文件夹的按钮
        folder_button.pack(side=tk.LEFT)  # 将按钮放置在Frame容器的左侧

        mapping_button = tk.Button(self, text="导出原文件名", command=self.generate_mapping_to_xlsx)  # 导出原文件名的按钮
        mapping_button.pack(pady=10)  # 将按钮放置在窗口中,并设置垂直间距

        xlsx_label = tk.Label(self, text="新文件名表格路径:")  # xlsx表格路径的Label标签
        xlsx_label.pack(pady=5)  # 将标签放置在窗口中,并设置垂直间距

        xlsx_entry_frame = tk.Frame(self)  # 创建一个Frame容器,用于放置xlsx表格路径的输入框和选择按钮
        xlsx_entry_frame.pack()

        xlsx_entry = tk.Entry(xlsx_entry_frame, textvariable=self.xlsx_path, width=40)  # 创建xlsx表格路径的输入框
        xlsx_entry.pack(side=tk.LEFT)  # 将输入框放置在Frame容器的左侧

        xlsx_button = tk.Button(xlsx_entry_frame, text="选择xlsx表格", command=self.select_xlsx)  # 创建选择xlsx表格的按钮
        xlsx_button.pack(side=tk.LEFT)  # 将按钮放置在Frame容器的左侧

        confirm_button = tk.Button(self, text="开始替换", command=self.rename_files)  # 开始替换的按钮
        confirm_button.pack(pady=10)  # 将按钮放置在窗口中,并设置垂直间距

    # 选择文件夹路径的方法
    def select_folder(self):
        folder_selected = filedialog.askdirectory()  # 弹出文件夹选择对话框,返回用户所选的文件夹路径
        if folder_selected:
            self.folder_path.set(folder_selected)  # 将选择的文件夹路径设置到对应的变量中

    # 选择xlsx表格路径的方法
    def select_xlsx(self):
        xlsx_selected = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")])  # 弹出文件选择对话框,返回用户所选的xlsx表格路径
        if xlsx_selected:
            self.xlsx_path.set(xlsx_selected)  # 将选择的xlsx表格路径设置到对应的变量中

    # 将文件名映射关系导出到xlsx表格的方法
    def generate_mapping_to_xlsx(self):
        folder_path = self.folder_path.get()  # 获取用户选择的文件夹路径
        xlsx_file_path = os.path.join(os.path.expanduser("~"), "Desktop", "filename_mapping.xlsx")  # 定义xlsx表格路径

        # 检查桌面是否存在filename_mapping.xlsx文件,如果存在则删除
        if os.path.exists(xlsx_file_path):
            os.remove(xlsx_file_path)

        mapping = {}  # 创建空字典用于存储文件名映射关系
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                old_name, file_ext = os.path.splitext(file)  # 分离文件名和文件扩展名
                new_name = old_name  # 默认新文件名与旧文件名相同
                mapping[old_name] = new_name  # 将旧文件名和新文件名存储到字典中

        workbook = openpyxl.Workbook()  # 创建一个新的Excel工作簿
        sheet = workbook.active  # 获取工作簿的活动表格
        sheet.append(["旧文件名", "新文件名"])  # 添加表头
        for old_name, new_name in mapping.items():
            sheet.append([old_name])  # 将旧文件名和新文件名添加到表格中

        workbook.save(xlsx_file_path)  # 将工作簿保存为xlsx文件
        messagebox.showinfo("提示", f"已生成文件名映射到 {xlsx_file_path}")  # 弹出提示框,显示生成的xlsx表格的路径

    # 执行文件名替换操作的方法
    def rename_files(self):
        folder_path = self.folder_path.get()  # 获取用户选择的文件夹路径
        xlsx_file_path = self.xlsx_path.get()  # 获取用户选择的xlsx表格路径

        if not os.path.isdir(folder_path):
            messagebox.showerror("错误", "请选择有效的文件夹路径")  # 弹出错误提示框,显示无效的文件夹路径
            return

        if not os.path.isfile(xlsx_file_path):
            messagebox.showerror("错误", "请选择有效的xlsx表格路径")  # 弹出错误提示框,显示无效的xlsx表格路径
            return

        mapping = {}  # 创建空字典用于存储文件名映射关系
        workbook = openpyxl.load_workbook(xlsx_file_path)  # 加载xlsx表格
        sheet = workbook.active  # 获取工作簿的活动表格
        for row in sheet.iter_rows(min_row=2, values_only=True):
            if len(row) == 2:
                old_name = str(row[0]).strip()  # 去除旧文件名的前后空格
                new_name = str(row[1]).strip()  # 去除新文件名的前后空格
                mapping[old_name] = new_name  # 将旧文件名和新文件名存储到字典中

        for root, dirs, files in os.walk(folder_path):
            for file in files:
                old_name, file_ext = os.path.splitext(file)  # 分离文件名和文件扩展名
                if old_name in mapping:
                    new_name = mapping[old_name]
                    new_file = os.path.join(root, new_name + file_ext)  # 构建新的文件路径
                    try:
                        os.rename(os.path.join(root, file), new_file)  # 重命名文件
                        print(f"重命名: {file} -> {new_name + file_ext}")  # 输出重命名结果
                    except Exception as e:
                        messagebox.showerror("错误", f"无法重命名 {file}. 原因: {str(e)}")  # 弹出错误提示框,显示重命名失败的原因

        messagebox.showinfo("提示", "文件名替换完成")  # 弹出提示框,显示替换完成的消息


if __name__ == "__main__":
    app = FileRenamerApp()  # 创建应用程序对象
    app.mainloop()  # 运行应用程序的主循环,监听事件

蓝奏云直接下载使用链接

https://wwlv.lanzout.com/b04wcq03i
密码:erc3

     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值