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提取页面内url列表的方法
May 25 Python
python的keyword模块用法实例分析
Jun 30 Python
python实现八大排序算法(2)
Sep 14 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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中for循环语句的几种变型
2007/03/16 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
JavaScript版代码高亮
2006/06/26 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
JS猜数字游戏实例讲解
2020/06/30 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python字典的常用方法总结
2019/07/31 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
五年级语文教学反思
2014/01/30 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
运动会闭幕词
2015/01/28 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书