最近做了一个需要解析财报pdf的项目,财报的格式大致一样,但是具体细节会有略微不同。

原本是使用pdfplumber来做,做到一半,发现 pdfplumber对于分页了的表格处理很不友好。

原本处理分页的表格,是将上一页的最后一个表格和下一页的第一个表格拼接,但是 pdfplumber 解析的表格出现乱序的情况,最后一个表格的位置出现在解析出的表格列表中间位置,导致合并表格数据失败。

所以中途又重新开始找解析框架,找到了 tabula,这个对于表格处理的某些方面比 pdfplumber 好,至少不会出现表格乱序的情况。

但是这个框架只支持pdf表格解析,不支持文字解析,所以最终还是 pdfplumber 和 tabula 混合使用。

总结来说:

pdfplumber:

优点:

  1. 对于文字的解析非常优秀,没有发现错字漏字的情况
  2. 对于普通表格的解析也很棒

缺点:

  1. 对于表格分页的情况处理很薄弱
  2. 合并单元格的表格解析会不够理想,但是效果还是要比tabula好。
  3. 有一个可视化表格工具,但那个工具巨难装,我装了一天半都没成功。

tabula:

优点:

  1. 专门用于处理pdf里的表格,对于表格分页的情况很理想
  2. 表格结果使用pandas的DataFrame数据格式包装,处理数据很强大。
  3. 有一个可视化应用exe,安装即可用(我没用过

缺点:

  1. pandas的DataFrame很强大是没错,但是对于不熟悉的人来说学习成本也很高。
  2. 合并单元格的表格形式,解析效果非常差劲,数据出现过缺失和乱序的情况
  3. 是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相关推荐

  1. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  2. python解析pdf,读取文字,可识别两栏pdf等

    python解析pdf,读取文字,可识别两栏pdf等 一.解析我们的pdf文件,首先第一步是解析普通类别的pdf(只有一栏) 代码中包含注释(不懂得可以留言) 二.处理拥有两栏等类型的pdf 为什么要 ...

  3. python解析pdf文件

    加载pdf文件,获取pdf的每一页对象: import pdfplumber path = "" with pdfplumber.open(path) as pdf_obj:pag ...

  4. Python解析pdf转为TXT格式

    #完成pdf到TXT转变了,无法完成TXT到Excel转变import xlwt # 写入文件 import xlrd # 打开excel文件 from xlutils.copy import cop ...

  5. io python 读取pdf_python自动化办公之 Python 解析 PDF

    上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...

  6. python interpreter 中没有torch_python自动化办公之 Python 解析 PDF

    上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...

  7. Python解析PDF文本

    基本操作 #pdfplumber对表格的处理能力强于pdfminer import pdfplumber import repath = r'E:\py_shiyan\Pycharm备份\Financ ...

  8. python解析pdf中文乱码_解析PDF文件以及解决编码问题

    1.解析pdf文件 最近需要将pdf中文本提取出来,于是就了解了一下pdfminer 首先安装:pip3 install pdfminer3k 之后就是用pdfminer解析,不多说,直接上代码,这些 ...

  9. python解析pdf中文乱码_使用Python第三方库pdfminer提取PDF内容,并解决中文编码不支持的问题...

    这两天刚好完成一个提取人行简版征信报告PDF所有数据的小项目,中间踩了很多坑,尤其是对于汉字编码问题度娘也不太灵.为了方便后人,在这里记录下在这个过程中我遇到的问题以及我的解决方法. 我用的是mac系 ...

最新文章

  1. poj2356(抽屉原理)
  2. SAP独门神器之VC变式配置,硬核整理版重磅推出!
  3. c# 二进制或算法实现枚举的HasFlag函数
  4. Rancher upgrade webhook之CI/CD
  5. Python入门基础知识学什么?
  6. 嵌入式java基准测试_Java正则表达式库基准测试– 2015年
  7. jQuery 源码解析笔记(一)
  8. vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
  9. 怎样增加phpmyadmin导入文件上限
  10. 多重判断php d代码,phpd代码审计
  11. 7款ui设计开发初学者必学的设计软件
  12. 素数and约数and反素数
  13. BUUCTF中的“新年快乐”
  14. JSTL 标签大全详解
  15. 去掉Eslint语法检测
  16. Gangs(附C语言实现)
  17. Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade问题和原因
  18. [Paper Reading] Dynamo: Amazon‘s Highly Available Key-value Store
  19. php64解密,PHP 用base64兑现加密解密
  20. Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)

热门文章

  1. 安科瑞企业综合能效管理系统 时丽花
  2. 原生JS实现全屏视频背景滚动淡出
  3. PowerBuilder学习笔记(2)PB与SQL语言
  4. 集体智慧编程学习之核方法
  5. 计算2个日期之间年龄
  6. JSP对象,JavaBean,Servlet简易教程
  7. CMMI五大成熟度定义及过程管理类详解
  8. UCHome二次开发–基本体系结构
  9. TextView(文本框)详解
  10. 华为存储学习笔记-8