You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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」')

关键细节说明

  1. 编号格式调整:如果你的需求编号不是R(1)格式,比如是REQ-001,修改代码里的正则表达式为req_id_pattern = re.compile(r'REQ-\d{3}')即可。
  2. 页眉处理:代码默认取前2行当页眉,若页眉行数不同,调整text_lines[:2]的数字即可;如果页眉提取不准,直接删除页眉相关代码,之后手动在Excel补充也可以。
  3. 扫描件注意:如果PDF是扫描生成的图片格式,以上代码无效,需要额外安装OCR工具(如pytesseract),先确认你的PDF是可复制文本的类型。
  4. 为什么不用SQL:你只是从单份PDF提取数据存Excel,完全不需要数据库,Python+pandas足够完成所有流程。

内容的提问来源于stack exchange,提问作者Cooffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:07:36