一、运行效果
本程序旨在对指定目录下的PDF文件进行批量重命名。执行程序后,原文件名如“36266郜一凡200304000038内部调拨.pdf”,会被修改为“1234一二200304000038保留规则.pdf”。以下是修改前后的直观展示:
修改前:

修改后:

二、功能解析
程序运行时,用户需输入待修改文件所在的目录。程序会基于输入目录,对其中的PDF文件执行重命名操作。重命名逻辑为保留文件名中间符合特定格式的部分,同时修改文件的前缀和后缀。
三、代码实现
3.1 Python 代码
import os
import re
import tkinter as tk
from tkinter import messagebox
def rename_pdf_files(folder_path, new_prefix, new_suffix):
for filename in os.listdir(folder_path):
if filename.endswith('.pdf'):
match = re.search(r'(\d+).*?(\d+)', filename)
if match:
middle_part = match.group(2)
new_filename = f"{new_prefix}{middle_part}{new_suffix}.pdf"
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
try:
os.rename(old_file_path, new_file_path)
print(f"已将 {filename} 重命名为 {new_filename}")
except Exception as e:
print(f"重命名 {filename} 时出错: {e}")
def start_renaming():
folder_path = entry.get()
if not os.path.exists(folder_path):
messagebox.showerror("错误", f"你输入的路径 {folder_path} 不存在,请检查后重新输入。")
return
new_prefix = '1234一二'
new_suffix = '保留规则'
rename_pdf_files(folder_path, new_prefix, new_suffix)
messagebox.showinfo("完成", "文件重命名操作已完成。")
root = tk.Tk()
root.title("PDF 文件重命名")
root.geometry("400x400")
label = tk.Label(root, text="请输入文件所在路径:")
label.pack(pady=20)
entry = tk.Entry(root, width=50)
entry.pack(pady=10)
button = tk.Button(root, text="开始重命名", command=start_renaming)
button.pack(pady=20)
root.mainloop()
3.2 代码详解
核心重命名函数rename_pdf_files
该函数接受三个参数:待处理文件所在目录folder_path、新文件名前缀new_prefix、新文件名后缀new_suffix。
- 遍历文件:使用
os.listdir遍历指定目录下的所有文件,并通过filename.endswith('.pdf')筛选出PDF文件。 - 提取中间部分:借助正则表达式
re.search(r'(\d+).*?(\d+)', filename)匹配并提取文件名中的中间数字部分。 - 构建新文件名:依据提取的中间部分、新前缀和新后缀,构建新的文件名
new_filename。 - 重命名文件:使用
os.rename将旧文件重命名为新文件,并在控制台打印重命名信息,若出现错误,也会打印错误信息。
启动重命名函数start_renaming
该函数负责获取用户输入的目录路径,并进行路径有效性检查。若路径不存在,弹出错误提示框。在确认路径有效后,设定新的前缀和后缀,调用rename_pdf_files函数执行重命名操作,并在操作完成后弹出提示框。
图形界面搭建
- 创建主窗口:使用
tk.Tk()创建名为“PDF 文件重命名”的主窗口,并设置窗口大小为400x400像素。 - 添加组件:创建提示标签、输入框和开始按钮。提示标签用于引导用户输入路径,输入框供用户输入文件目录,开始按钮则绑定
start_renaming函数,点击后触发重命名操作。 - 启动主循环:使用
root.mainloop()启动图形界面的主循环,确保界面能够响应用户操作。












