如何使用Python读取PDF首行内容批量重命名PDF文件
PDF批量按首行重命名Python实现方案
这个需求完全可以通过Python实现,整体逻辑清晰,不需要复杂的工具支持,仅需少量代码即可完成批量处理。
依赖安装
需要用到第三方PDF解析库PyPDF2,搭配Python自带的os、re模块即可完成文件遍历、重命名、字符清洗操作,执行以下命令安装依赖:pip install PyPDF2
可直接运行的完整代码
import os import re from PyPDF2 import PdfReader # 替换为你本地存放PDF文件的文件夹路径 PDF_DIR = r"替换为你的PDF文件夹实际路径" # 匹配Windows/macOS系统文件名不允许的非法字符 INVALID_NAME_CHAR = re.compile(r'[\\/*?:"<>|\r\n\t]') if __name__ == "__main__": for file_name in os.listdir(PDF_DIR): # 跳过非PDF文件 if not file_name.lower().endswith(".pdf"): continue old_path = os.path.join(PDF_DIR, file_name) # 跳过子文件夹,仅处理文件 if not os.path.isfile(old_path): continue try: # 读取PDF第一页内容 pdf_reader = PdfReader(old_path) first_page_content = pdf_reader.pages[0].extract_text() if not first_page_content: print(f"跳过文件 {file_name}:无法提取有效文本(可能是扫描件)") continue # 拆分文本行,取第一个非空行作为首行 line_list = [line.strip() for line in first_page_content.splitlines() if line.strip()] if not line_list: print(f"跳过文件 {file_name}:第一页无有效文本行") continue first_line = line_list[0] # 清洗非法字符,避免重命名报错 clean_name = INVALID_NAME_CHAR.sub("", first_line).strip() if not clean_name: print(f"跳过文件 {file_name}:首行清洗后无有效文件名") continue # 处理重名冲突,重名文件自动追加数字后缀 new_name = f"{clean_name}.pdf" new_path = os.path.join(PDF_DIR, new_name) num_suffix = 1 while os.path.exists(new_path): new_name = f"{clean_name}_{num_suffix}.pdf" new_path = os.path.join(PDF_DIR, new_name) num_suffix += 1 # 执行重命名 os.rename(old_path, new_path) print(f"处理完成:{file_name} -> {new_name}") except Exception as e: print(f"处理文件 {file_name} 失败:{str(e)},已自动跳过")
使用说明
- 运行代码前务必备份所有原PDF文件,避免操作失误导致文件异常
- 将代码中
PDF_DIR变量的值替换为你本地存放PDF的实际文件夹路径即可运行 - 代码自动适配Windows、macOS系统的文件名规则,自动过滤非法字符、处理重名文件、跳过无法解析的文件,不会中途崩溃
- 如果是扫描版图片PDF,没有可直接提取的文本层,该代码无法识别内容,需要额外接入OCR工具才能实现文本提取
- 如果需要严格取PDF第一页最顶部的行(包括空行),可以删除代码中判断空行的逻辑,直接取拆分后的第一行即可
内容的提问来源于stack exchange,提问作者Angelo Malfitano
相关产品推荐
相关产品推荐

