从PDF报告提取数据用于Python项目,转换后数据杂乱求助
解决PDF转CSV/文本后数据杂乱的方案
从你提供的PDF报告(表格类结构)来看,直接转文本/CSV乱序是因为PDF的排版逻辑(单元格换行、跨页、字体偏移)导致的,试试下面几个Python工具和实用方法:
用Tabula提取结构化表格
Tabula专门针对PDF表格提取,能保留行列结构,适配大多数规整表格。
先安装:pip install tabula-py基础提取代码:
import tabula # 读取PDF,pages指定页码,多页写'all' df_list = tabula.read_pdf("你的报告文件.pdf", pages=1) # 保存为CSV(如果多页可以循环处理) df_list[0].to_csv("提取结果.csv", index=False)遇到跨页或合并单元格的复杂表格,加
guess=False手动指定提取区域:# 区域坐标用tabula.gui()打开可视化工具选取 df_list = tabula.read_pdf("你的报告文件.pdf", pages=1, area=[100, 20, 600, 800], guess=False)用PyPDF2+正则清洗非结构化文本
如果PDF不是标准表格,转文本后用正则匹配规整数据:
先提取文本:from PyPDF2 import PdfReader reader = PdfReader("你的报告文件.pdf") full_text = "" for page in reader.pages: full_text += page.extract_text()再根据数据格式写正则,比如提取带编号、日期、数值的条目:
import re import pandas as pd # 示例正则,根据你的实际数据格式调整 pattern = r"序号:(\d+) 日期:(\d{4}-\d{2}-\d{2}) 数值:(\d+)" data_matches = re.findall(pattern, full_text) # 转成DataFrame后存CSV df = pd.DataFrame(data_matches, columns=["序号", "日期", "数值"]) df.to_csv("清洗后数据.csv", index=False)用OCR处理扫描版PDF
如果你的PDF是扫描件(图片转的PDF),得用OCR工具识别:
先装依赖:pip install pytesseract pdf2image还要安装Tesseract引擎(自行对应Windows/Mac/Linux系统安装),然后代码:
from pdf2image import convert_from_path import pytesseract import pandas as pd # 把PDF转成图片 pdf_pages = convert_from_path("你的报告文件.pdf") all_text = "" # 识别每页文本,中文用chi_sim,英文用eng for page in pdf_pages: all_text += pytesseract.image_to_string(page, lang='chi_sim') # 后续用正则或字符串分割规整数据,再导出CSV用pdfplumber优化文本提取排版
pdfplumber的layout=True参数能更好保留原PDF的行列对齐,方便后续拆分:import pdfplumber with pdfplumber.open("你的报告文件.pdf") as pdf: first_page = pdf.pages[0] # 保留排版结构提取文本 structured_text = first_page.extract_text(layout=True)提取后可以按换行、制表符或固定宽度拆分数据,再整理成表格。
内容的提问来源于stack exchange,提问作者francisco hoquee
相关产品推荐
相关产品推荐

