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

如何从PDF中提取结构化数据并规范存储到Excel中

PDF人员数据提取转Excel实现方案

问题背景

需要从指定PDF中提取人员明细数据,整理为结构化表格后存入Excel。
PDF样本如下:
PDF样本

原有尝试代码

原有代码存在未初始化PDF读取实例的问题,原始代码如下:

import PyPDF2 as pypdf
pdfobject=open('w10.pdf','rb')
for i in range(1,pdf.getNumPages()-1):
    print(pdf.getPage(i).extractText())

原始提取结果特征

运行文本提取后得到的无结构逐行文本规律如下:

  • 开头3行为全局公共信息:城市、统计年份、st编号,不属于单条人员数据
  • 后续每行均为字段名 字段值格式
  • 单条人员记录固定以ID No.开头,以Sex字段结尾,字段顺序固定

原始提取文本片段:

city:Mohali
population 2022
st:456
ID No. 8511
H Code IPRTAHNRE
I Code #5477/7985
Name Sanjeev
Father's Name Ashwani
House No. 121
Age  22
Sex  Male
ID No. 2500
...

预期输出效果

需要整理为结构化表格存入Excel,效果参考:
预期结果示例


可运行实现代码

实现逻辑:

  1. 正确初始化PDF读取器,提取所有非空文本行
  2. 跳过开头公共信息行,遍历剩余行自动拼接人员记录,避免固定行数切分导致的错位问题
  3. 字段拆分使用maxsplit=1适配字段值带空格、字段名带空格(如Father's Name)的场景
  4. 最终转为结构化表格直接导出为Excel文件

依赖安装:执行pip install pypdf2 pandas openpyxl安装所需库

import PyPDF2
import pandas as pd

record_list = []
current_person = {}

# 读取PDF提取所有非空文本行
with open('w10.pdf', 'rb') as f:
    pdf_reader = PyPDF2.PdfReader(f)
    all_lines = []
    # 遍历PDF页面,如需跳过首尾页可自行调整页码切片范围
    for page in pdf_reader.pages:
        page_text = page.extract_text()
        lines = [line.strip() for line in page_text.split('\n') if line.strip()]
        all_lines.extend(lines)

# 跳过开头3行公共信息,拆分人员记录
for line in all_lines[3:]:
    key, value = line.split(maxsplit=1)
    # 适配带空格的字段名
    if key == "Father's":
        key = "Father's Name"
        value = value.split(maxsplit=1)[1]
    elif key == "House":
        key = "House No."
        value = value.split(maxsplit=1)[1]
    elif key == "ID":
        key = "ID No."
        value = value.split(maxsplit=1)[1]
    elif key == "H":
        key = "H Code"
        value = value.split(maxsplit=1)[1]
    elif key == "I":
        key = "I Code"
        value = value.split(maxsplit=1)[1]
    
    value = value.strip()
    current_person[key] = value

    # 遇到Sex字段代表当前人员信息读取完成,存入结果列表
    if key == "Sex":
        record_list.append(current_person)
        current_person = {}

# 导出为Excel文件
df = pd.DataFrame(record_list)
# 调整列顺序匹配预期格式
df = df[["ID No.", "H Code", "I Code", "Name", "Father's Name", "House No.", "Age", "Sex"]]
df.to_excel("person_info.xlsx", index=False)
print(f"提取完成,共导出{len(df)}条人员记录,已保存为person_info.xlsx")

适配说明

  • 如果遇到PyPDF2提取文本错位的情况,可更换为pdfplumber库做文本提取,提取精度更高,后续数据处理逻辑无需修改
  • 如果PDF字段有增减,只需调整字段名匹配的判断逻辑即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:27:18