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实现批量读取word中表格信息的方法
Jul 30 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python交互式图形编程的实现
Jul 25 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Python各种扩展名区别点整理
Feb 27 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
提高python代码运行效率的一些建议
Sep 29 Python
浅谈Python numpy创建空数组的问题
May 25 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
offsetParent 算法分析
2010/04/05 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
javascript中length属性的探索
2011/07/31 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
javascript事件模型介绍
2016/05/31 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python ldap实现登录实例代码
2016/09/30 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Django框架模板的使用方法示例
2019/05/25 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
《夕阳真美》教学反思
2014/04/27 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
开学典礼致辞
2015/07/29 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL