如何用Python从PDF提取需求数据并转存至Excel?
从PDF提取需求到Excel的Python实现(新手友好)
核心结论
完全不需要SQL,用Python就能搞定。PyPDF2可以用,但更推荐PyMuPDF(fitz)——它提取文本更准确,新手调试起来更省心。下面是一步一步的实现方案,代码全给你写好,照着改就能用。
步骤1:安装必要工具
打开命令提示符(Windows)或终端(Mac/Linux),输入以下命令安装两个库:
pip install pymupdf pandas
pymupdf:负责读取PDF、提取文本pandas:负责把提取的数据转成Excel表格
步骤2:复制运行代码
把下面的代码保存成extract_req.py文件,替换成你的PDF路径后直接运行即可:
import fitz # 导入PyMuPDF库 import pandas as pd import re def extract_requirements(pdf_path): # 存储所有需求的列表 requirements = [] # 匹配需求编号的规则:适配R(1)、R(100)格式,若你的编号是R-001则改成r'R-\d{3}' req_id_pattern = re.compile(r'R\(\d+\)') # 打开PDF文档 with fitz.open(pdf_path) as doc: # 遍历每一页 for page_num in range(len(doc)): page = doc[page_num] # 把页面文本按行拆分 text_lines = page.get_text().split('\n') # 提取页眉:假设页眉是页面前2行,可根据你的文档调整行数 page_header = '\n'.join(text_lines[:2]) if len(text_lines) >= 2 else '' current_id = None current_content = [] # 从第3行开始处理内容(跳过页眉) for line in text_lines[2:]: line = line.strip() if not line: # 跳过空行 continue # 检查当前行是否为需求编号 id_match = req_id_pattern.match(line) if id_match: # 保存上一个未完成的需求 if current_id and current_content: requirements.append({ '页眉': page_header, '需求编号': current_id, '需求内容': ' '.join(current_content) }) # 更新当前需求编号 current_id = id_match.group() # 处理编号后直接跟内容的情况(如R(1) 这是需求内容) content_part = line[len(current_id):].strip() current_content = [content_part] if content_part else [] elif current_id: # 追加当前行到需求内容 current_content.append(line) # 保存每页最后一个需求 if current_id and current_content: requirements.append({ '页眉': page_header, '需求编号': current_id, '需求内容': ' '.join(current_content) }) return requirements # ------------------- 替换成你的PDF路径 ------------------- pdf_file = '你的需求文档.pdf' # ------------------- ------------------- ------------------- # 提取需求 req_list = extract_requirements(pdf_file) # 转成表格并保存为Excel df = pd.DataFrame(req_list) df.to_excel('需求提取结果.xlsx', index=False) print('搞定!结果已保存到「需求提取结果.xlsx」')
关键细节说明
- 编号格式调整:如果你的需求编号不是
R(1)格式,比如是REQ-001,修改代码里的正则表达式为req_id_pattern = re.compile(r'REQ-\d{3}')即可。 - 页眉处理:代码默认取前2行当页眉,若页眉行数不同,调整
text_lines[:2]的数字即可;如果页眉提取不准,直接删除页眉相关代码,之后手动在Excel补充也可以。 - 扫描件注意:如果PDF是扫描生成的图片格式,以上代码无效,需要额外安装OCR工具(如pytesseract),先确认你的PDF是可复制文本的类型。
- 为什么不用SQL:你只是从单份PDF提取数据存Excel,完全不需要数据库,Python+pandas足够完成所有流程。
内容的提问来源于stack exchange,提问作者Cooffe
相关产品推荐
相关产品推荐

