如何用Python批量从PDF提取结构化需求至Excel?
批量提取PDF编号需求并导出到Excel的Python脚本
先安装所需依赖:
pip install PyPDF2 pandas openpyxl
以下是完整脚本,支持批量处理指定文件夹下的所有PDF,自动提取以数字+.开头的需求条目(包含下属(a)(b)(c)子项),最终导出到Excel:
import os import re import PyPDF2 import pandas as pd def extract_requirements_from_pdf(pdf_path): # 读取PDF文本 with open(pdf_path, 'rb') as f: reader = PyPDF2.PdfReader(f) text = '' for page in reader.pages: text += page.extract_text() or '' # 清理文本中的多余换行,避免子项被拆分 cleaned_text = re.sub(r'\n(?!\d+\.)', ' ', text) # 匹配以"数字+."开头的需求条目,直到下一个编号或文本结束 pattern = r'(\d+\.\s.*?)(?=\n\d+\.|\Z)' requirements = re.findall(pattern, cleaned_text, re.DOTALL) # 整理每条需求,去除首尾空格 requirements = [req.strip() for req in requirements] # 返回包含文件名和需求的列表 return [(os.path.basename(pdf_path), req) for req in requirements] def batch_process_pdfs(pdf_folder, output_excel): all_data = [] # 遍历文件夹下所有PDF文件 for filename in os.listdir(pdf_folder): if filename.lower().endswith('.pdf'): pdf_path = os.path.join(pdf_folder, filename) print(f"正在处理:{filename}") pdf_data = extract_requirements_from_pdf(pdf_path) all_data.extend(pdf_data) # 转换为DataFrame df = pd.DataFrame(all_data, columns=['PDF文件名', '需求内容']) # 导出到Excel df.to_excel(output_excel, index=False, engine='openpyxl') print(f"处理完成!结果已保存到:{output_excel}") # 配置路径 PDF_FOLDER = './需求PDF文件夹' # 替换为你的PDF文件夹路径 OUTPUT_EXCEL = './需求汇总.xlsx' # 替换为你的输出Excel路径 if __name__ == '__main__': batch_process_pdfs(PDF_FOLDER, OUTPUT_EXCEL)
关键说明:
- 正则表达式
r'(\d+\.\s.*?)(?=\n\d+\.|\Z)':专门匹配以数字+.开头的条目,(?=\n\d+\.|\Z)是正向预查,确保匹配到下一个编号条目或文本结尾就停止,自动把(a)(b)这类子项合并到对应的主需求条目中。 - 文本清理步骤
re.sub(r'\n(?!\d+\.)', ' ', text):把不是新编号开头的换行替换成空格,避免子项因为换行被拆分成单独条目。 - 批量处理逻辑:自动遍历指定文件夹下的所有PDF,无需逐个手动处理。
如果遇到部分PDF文本提取有乱码或格式异常,可以尝试替换PyPDF2为pdfplumber(安装后替换读取文本的逻辑),它对复杂PDF的文本提取兼容性更好。
内容的提问来源于stack exchange,提问作者Isidora
相关产品推荐
相关产品推荐

