求助:Python脚本提取PDF中服务标签并重命名PDF文件
批量提取PDF服务标签并重命名文件
问题原因
你当前的PDF处理代码逻辑有误:for x in text会遍历提取到的文本每个字符,而非按行遍历,因此永远匹配不到以"SN"开头的行。TXT文件的逻辑可行是因为for line in serial是按行读取,但PDF提取的文本需要先做行拆分处理。
单文件处理修正代码
from PyPDF2 import PdfReader import os # 目标PDF路径 pdf_path = "SNPDF.pdf" # 读取PDF第一页文本 reader = PdfReader(pdf_path) page_text = reader.pages[0].extract_text() # 按行遍历查找服务标签 new_name = None for line in page_text.splitlines(): line = line.strip() # 清理行首尾空白 if line.startswith("SN"): # 去除SN前缀并补全PDF后缀 new_name = line.replace("SN", "").strip() + ".pdf" break # 找到序列号则执行重命名 if new_name: os.rename(pdf_path, new_name) print(f"文件已重命名为: {new_name}") else: print("未找到以SN开头的服务标签")
批量处理文件夹内所有PDF
如果需要处理指定文件夹下的所有PDF文件,可使用以下代码:
from PyPDF2 import PdfReader import os # 目标文件夹路径 folder_path = "./pdf_files" for filename in os.listdir(folder_path): if filename.lower().endswith(".pdf"): pdf_path = os.path.join(folder_path, filename) try: reader = PdfReader(pdf_path) page_text = reader.pages[0].extract_text() new_name = None for line in page_text.splitlines(): line = line.strip() if line.startswith("SN"): new_name = line.replace("SN", "").strip() + ".pdf" break if new_name: new_path = os.path.join(folder_path, new_name) # 避免重名覆盖 if not os.path.exists(new_path): os.rename(pdf_path, new_path) print(f"已重命名: {filename} -> {new_name}") else: print(f"跳过{filename}: 目标文件名{new_name}已存在") else: print(f"跳过{filename}: 未找到服务标签") except Exception as e: print(f"处理{filename}出错: {str(e)}")
关键改动说明
- 用
splitlines()将PDF提取的文本拆分为行,对齐TXT文件的遍历逻辑 - 增加
strip()清理行首尾的空格、换行符,避免提取的序列号带多余空白 - 批量处理时加入重名判断,防止文件被意外覆盖
- 添加异常捕获,处理损坏或无法读取的PDF文件
内容的提问来源于stack exchange,提问作者Oleh
相关产品推荐
相关产品推荐

