python解析pdf,pdfplumber和tabula
最近做了一个需要解析财报pdf的项目,财报的格式大致一样,但是具体细节会有略微不同。
原本是使用pdfplumber来做,做到一半,发现 pdfplumber对于分页了的表格处理很不友好。
原本处理分页的表格,是将上一页的最后一个表格和下一页的第一个表格拼接,但是 pdfplumber 解析的表格出现乱序的情况,最后一个表格的位置出现在解析出的表格列表中间位置,导致合并表格数据失败。
所以中途又重新开始找解析框架,找到了 tabula,这个对于表格处理的某些方面比 pdfplumber 好,至少不会出现表格乱序的情况。
但是这个框架只支持pdf表格解析,不支持文字解析,所以最终还是 pdfplumber 和 tabula 混合使用。
总结来说:
pdfplumber:
优点:
- 对于文字的解析非常优秀,没有发现错字漏字的情况
- 对于普通表格的解析也很棒
缺点:
- 对于表格分页的情况处理很薄弱
- 合并单元格的表格解析会不够理想,但是效果还是要比tabula好。
- 有一个可视化表格工具,但那个工具巨难装,我装了一天半都没成功。
tabula:
优点:
- 专门用于处理pdf里的表格,对于表格分页的情况很理想
- 表格结果使用pandas的DataFrame数据格式包装,处理数据很强大。
- 有一个可视化应用exe,安装即可用(我没用过
缺点:
- pandas的DataFrame很强大是没错,但是对于不熟悉的人来说学习成本也很高。
- 合并单元格的表格形式,解析效果非常差劲,数据出现过缺失和乱序的情况
- 是java编写的,所以依赖于jdk
简单示例:
pdfplumber,文档地址:https://github.com/jsvine/pdfplumber
# 解析pdf
with pdfplumber.open("abc.pdf") as pdf:# 拿到第一页的对象page = parse_pdf.pages[0]# 拿到这一页的文本数据text = page.extract_text()# 拿到这一页的所有表格数据tables = page.extract_tables()# 遍历表格for t_index in range(len(tables)):table = tables[t_index]# 遍历每一行的数据for data in table:print(data)
tabula,文档地址:https://aegis4048.github.io/parse-pdf-files-while-retaining-structure-with-tabula-py
# 解析表格, stream表示流模式识别(建议),guess为猜测,pages是页面下标,从1开始
# multiple_tables是需不需要识别多个表格
tables = tabula.read_pdf(pdf_path, stream=True, guess=True, pages= [1,2],multiple_tables=True)# 遍历表for table in tables:# 通过表格内置下标迭代器来遍历下标(也可能不是下标,而是idfor index in table.index:# 获取下标所属那一行的值data = table.loc[index].values
彩蛋(tabula 表格去除全部为空的行和列):
def format_data_frame(table):"""格式化data_frame表格,删除全部为空的行和列:return:"""all_data = table.isna()for t_index in all_data.index:data = all_data.loc[t_index].valuesif all(data):table = table.drop([t_index], axis=0, inplace=False)for clo_name in all_data.columns:data = all_data[clo_name]if all(data):table = table.drop(clo_name, axis=1, inplace=False)return table
python解析pdf,pdfplumber和tabula相关推荐
- python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍
Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...
- python解析pdf,读取文字,可识别两栏pdf等
python解析pdf,读取文字,可识别两栏pdf等 一.解析我们的pdf文件,首先第一步是解析普通类别的pdf(只有一栏) 代码中包含注释(不懂得可以留言) 二.处理拥有两栏等类型的pdf 为什么要 ...
- python解析pdf文件
加载pdf文件,获取pdf的每一页对象: import pdfplumber path = "" with pdfplumber.open(path) as pdf_obj:pag ...
- Python解析pdf转为TXT格式
#完成pdf到TXT转变了,无法完成TXT到Excel转变import xlwt # 写入文件 import xlrd # 打开excel文件 from xlutils.copy import cop ...
- io python 读取pdf_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- python interpreter 中没有torch_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- Python解析PDF文本
基本操作 #pdfplumber对表格的处理能力强于pdfminer import pdfplumber import repath = r'E:\py_shiyan\Pycharm备份\Financ ...
- python解析pdf中文乱码_解析PDF文件以及解决编码问题
1.解析pdf文件 最近需要将pdf中文本提取出来,于是就了解了一下pdfminer 首先安装:pip3 install pdfminer3k 之后就是用pdfminer解析,不多说,直接上代码,这些 ...
- python解析pdf中文乱码_使用Python第三方库pdfminer提取PDF内容,并解决中文编码不支持的问题...
这两天刚好完成一个提取人行简版征信报告PDF所有数据的小项目,中间踩了很多坑,尤其是对于汉字编码问题度娘也不太灵.为了方便后人,在这里记录下在这个过程中我遇到的问题以及我的解决方法. 我用的是mac系 ...
最新文章
- poj2356(抽屉原理)
- SAP独门神器之VC变式配置,硬核整理版重磅推出!
- c# 二进制或算法实现枚举的HasFlag函数
- Rancher upgrade webhook之CI/CD
- Python入门基础知识学什么?
- 嵌入式java基准测试_Java正则表达式库基准测试– 2015年
- jQuery 源码解析笔记(一)
- vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
- 怎样增加phpmyadmin导入文件上限
- 多重判断php d代码,phpd代码审计
- 7款ui设计开发初学者必学的设计软件
- 素数and约数and反素数
- BUUCTF中的“新年快乐”
- JSTL 标签大全详解
- 去掉Eslint语法检测
- Gangs(附C语言实现)
- Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade问题和原因
- [Paper Reading] Dynamo: Amazon‘s Highly Available Key-value Store
- php64解密,PHP 用base64兑现加密解密
- Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)