如何从PDF中提取结构化数据并规范存储到Excel中
PDF人员数据提取转Excel实现方案
问题背景
需要从指定PDF中提取人员明细数据,整理为结构化表格后存入Excel。
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,效果参考:
可运行实现代码
实现逻辑:
- 正确初始化PDF读取器,提取所有非空文本行
- 跳过开头公共信息行,遍历剩余行自动拼接人员记录,避免固定行数切分导致的错位问题
- 字段拆分使用
maxsplit=1适配字段值带空格、字段名带空格(如Father's Name)的场景 - 最终转为结构化表格直接导出为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
相关产品推荐
相关产品推荐

