如何根据xls表格映射关系批量匹配重命名文件夹内pdf文件
可行性结论
这个需求完全可以实现,通过简单的批量处理脚本即可自动完成全量匹配重命名,全程不需要手动逐个修改文件名。
前置准备
- 提前备份所有待处理的PDF文件,避免操作失误导致文件名混乱、文件丢失
- 将存储文件名映射关系的
.xls表格和所有待重命名的PDF文件放在同一文件夹下 - 安装脚本运行需要的依赖:执行命令
pip install xlrd==1.2.0即可,注意xlrd版本必须为1.2.0,高版本不再支持.xls格式读取
实现脚本
import os import xlrd # -------------------------- 按需修改以下配置项 -------------------------- FOLDER_PATH = "./" # PDF和xls文件所在文件夹路径,二者放同一文件夹直接保留./即可 XLS_FILE_NAME = "文件名映射表.xls" # 替换为你自己的xls文件实际名称 # ---------------------------------------------------------------------- # 读取xls中的文件名映射关系 name_mapping = {} workbook = xlrd.open_workbook(os.path.join(FOLDER_PATH, XLS_FILE_NAME)) worksheet = workbook.sheet_by_index(0) # 默认读取第一个工作表,映射表不在第一个就改对应索引 # 遍历表格行存映射,第一行是表头就从第2行(索引1)开始读,没表头就把起始值改成0 for row in range(1, worksheet.nrows): original_name = str(worksheet.cell_value(row, 0)).strip() target_name = str(worksheet.cell_value(row, 1)).strip() if original_name and target_name: name_mapping[original_name] = target_name # 遍历文件夹PDF执行重命名 success_count = 0 failed_records = [] for file in os.listdir(FOLDER_PATH): if file.lower().endswith(".pdf"): file_stem = os.path.splitext(file)[0].strip() if file_stem in name_mapping: old_full_path = os.path.join(FOLDER_PATH, file) new_file_name = f"{name_mapping[file_stem]}.pdf" new_full_path = os.path.join(FOLDER_PATH, new_file_name) try: os.rename(old_full_path, new_full_path) success_count += 1 print(f"重命名成功:{file} -> {new_file_name}") except Exception as e: failed_records.append(f"{file} 重命名失败:{str(e)}") # 输出最终统计结果 print("-"*50) print(f"处理完成,共成功重命名{success_count}个PDF文件") if failed_records: print("失败明细:") for record in failed_records: print(record)
使用说明
- 把代码里的
XLS_FILE_NAME变量值替换为你自己的.xls文件实际名称 - 如果你的
.xls表格第一行直接是文件名映射数据、没有表头,把代码循环部分range(1, worksheet.nrows)里的1改成0即可 - 运行脚本后控制台会自动打印每个文件的处理结果,以及最终的成功、失败统计
常见问题处理
- 如果提示重命名失败,优先检查表格里的目标文件名是否包含
/ \ : * ? " < > |这类操作系统禁止作为文件名的特殊字符,提前替换后再运行即可 - 如果提示找不到匹配项,检查表格里的原文件名是否和PDF实际文件名(去掉
.pdf后缀后)完全一致,排查是否存在多余空格、全角/半角字符差异
内容的提问来源于stack exchange,提问作者Angelo Malfitano
相关产品推荐
相关产品推荐

