如何使用Python将多个PDF文件批量重命名为其内置文档标题
Python 3.10 环境下PDF批量按标题重命名实现方案
前置依赖安装
运行代码前先执行以下命令安装适配Python 3.10的依赖库:
pip install pypdf2 python-slugify
可直接运行的完整代码
import os from PyPDF2 import PdfReader from slugify import slugify # ************ 修改为你存放PDF文件的实际文件夹路径 ************ PDF_FOLDER = "./pdf_files" def get_valid_filename(title, exists_files): # 处理标题生成合法文件名 # 如需保留中文标题,可替换为下一行代码: # base_name = "".join([c for c in title if c not in r'\/:*?"<>|']).strip() base_name = slugify(title) final_name = f"{base_name}.pdf" count = 1 # 处理重名问题 while final_name in exists_files: final_name = f"{base_name}_{count}.pdf" count += 1 return final_name if __name__ == "__main__": # 提前读取所有现有文件名避免重名 exist_pdfs = [f for f in os.listdir(PDF_FOLDER) if f.lower().endswith(".pdf")] processed_count = 0 for filename in exist_pdfs: file_path = os.path.join(PDF_FOLDER, filename) try: # 读取PDF元数据 reader = PdfReader(file_path) pdf_title = reader.metadata.title # 跳过无标题的PDF if not pdf_title or str(pdf_title).strip() == "": print(f"跳过无标题文件:{filename}") continue # 生成合法新文件名 new_filename = get_valid_filename(pdf_title.strip(), exist_pdfs) new_file_path = os.path.join(PDF_FOLDER, new_filename) # 执行重命名 os.rename(file_path, new_file_path) # 更新现有文件名列表 exist_pdfs.remove(filename) exist_pdfs.append(new_filename) processed_count += 1 print(f"重命名成功:{filename} -> {new_filename}") except Exception as e: print(f"处理文件失败 {filename},错误原因:{str(e)}") continue print(f"全部处理完成,共成功重命名 {processed_count} 个文件")
代码使用说明
- 运行前先将代码中
PDF_FOLDER变量的值修改为你存放600份PDF的本地文件夹路径 - 默认生成的文件名会自动过滤所有特殊字符,如需保留中文标题,按照代码中注释替换
base_name的生成逻辑即可 - 代码会自动跳过损坏的PDF、无标题元数据的PDF,不会无理由修改原文件
- 遇到相同标题的PDF会自动添加
_1、_2后缀,不会出现文件覆盖问题
注意事项
- 运行代码前请先备份所有PDF文件,避免误操作导致文件丢失
- 扫描版PDF、加密PDF一般没有内置标题元数据,这类文件会保持原文件名
- 如需自定义命名规则,可在生成
new_filename的位置添加前缀、日期等自定义字段
内容的提问来源于stack exchange,提问作者Kunwar Utkarsh
相关产品推荐
相关产品推荐

