Python 用三行代码提取PDF表格数据


Posted in Python onOctober 13, 2019

从 PDF 表格中获取数据是一项痛苦的工作。不久前,一位开发者提供了一个名为 Camelot 的工具,使用三行代码就能从 PDF 文件中提取表格数据。

PDF 文件是一种非常常用的文件格式,通常用于正式的电子版文件。它能够很好的将不同的排版格式固定下来,形成版面清晰且美观的展示效果。然而,对于想要从 PDF 中提取信息的人们来说,PDF 是个噩梦,尤其是表格。

大量的学术报告、论文、分析文章都使用 PDF 展示其中的表格数据,但是对于如果想要直接从表格中复制数据则会非常麻烦。不久前,有一位开发者提供了一个可从文字 PDF 中提取表格信息的工具——Camelot,能够直接将大部分表格转换为 Pandas 的 Dataframe。

项目地址:https://github.com/camelot-dev/camelot

Camelot 是什么

据项目介绍称,Camelot 是一个 Python 工具,用于将 PDF 文件中的表格数据提取出来。

具体而言,用户可以像使用 Pandas 那样打开 PDF 文件,然后利用这个工具提取表格数据,最后再指定输出的形式(如 csv 文件)。

代码示例

项目提供的 PDF 文件如图所示,假设用户需要提取这些文字之间的表格 2-1 中的信息。

Python 用三行代码提取PDF表格数据

PDF 文件。我们需要提取表格 2-1。

使用 Camelot 提取表格数据的代码如下:

>>> import camelot
>>> tables = camelot.read_pdf('foo.pdf') #类似于Pandas打开CSV文件的形式
>>> tables[0].df # get a pandas DataFrame!
>>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html, sqlite,可指定输出格式
>>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_sqlite, 导出数据为文件
>>> tables
<TableList n=1>
>>> tables[0]
<Table shape=(7, 7)> # 获得输出的格式
>>> tables[0].parsing_report
{
 'accuracy': 99.02,
 'whitespace': 12.24,
 'order': 1,
 'page': 1
}

以下为输出的结果,对于合并的单元格,Camelot 在抽取后做了空行处理,这是一个稳妥的方法。

Python 用三行代码提取PDF表格数据

安装方法

项目作者提供了三种安装方法。首先,你可以使用 Conda 进行安装,这是最简单的。

conda install -c conda-forge camelot-py

最流行的安装方法是使用 pip 安装。

pip install camelot-py[cv]

还可以从项目中克隆代码,并使用源码安装。

git clone https://www.github.com/camelot-dev/camelot
cd camelot
pip install ".[cv]"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用PIL库批量给图片加上序号的教程
May 06 Python
简单解析Django框架中的表单验证
Jul 17 Python
Python中Collections模块的Counter容器类使用教程
May 31 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
Python字典底层实现原理详解
Dec 18 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
Python3离线安装Requests模块问题
Oct 13 #Python
详解使用Python下载文件的几种方法
Oct 13 #Python
Python中输入和输出(打印)数据实例方法
Oct 13 #Python
分享8点超级有用的Python编程建议(推荐)
Oct 13 #Python
ipad上运行python的方法步骤
Oct 12 #Python
python字典排序的方法
Oct 12 #Python
python查看数据类型的方法
Oct 12 #Python
You might like
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS delegate与live浅析
2013/12/21 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
python格式化字符串实例总结
2014/09/28 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python 实现识别图片上的数字
2019/07/30 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python 中如何写注释
2020/08/28 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
银行职业规划书范文
2013/12/28 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
Python if else条件语句形式详解
2022/03/24 Python
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python