对于办公文员以及财务工作者往往要处理很多办公事项,特别是重命名文件名。
下面介绍一个用Python写的一个小程序。
操作方法如下:
- 下载文件后,双击运行exe程序。
-
选择需要重命名文件的文件夹路径。
- 点击导出原文件名按钮,会在桌面生成一个filename_mapping.xlsx文件。
- 打开filename_mapping.xlsx文件之后,会发现第二步上传在文件夹路径中的文件名会显示到表格A列旧文件名中,用户根据需要在B列填写新文件名,填写完之后保存关闭。
- 选择刚才填写好修改文件名表格的路径,然后点击开始替换,显示“文件名替换完成”的提示后,点击确定,这样文件名就替换完成了。
- 如果运行错误提示:无法启动此程序,因为计算机中丢失 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