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两种遍历字典(dict)的方法比较
May 29 Python
Python实现冒泡,插入,选择排序简单实例
Aug 18 Python
python实现的希尔排序算法实例
Jul 01 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
python实现蒙特卡罗方法教程
Jan 28 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python实现TCP文件传输
Mar 20 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
python spilt()分隔字符串的实现示例
May 21 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
Bootstrap表单布局
2016/07/19 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python Shapely使用指南详解
2020/02/18 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
如何在存储过程中使用Loop
2016/01/05 面试题
4s店总经理岗位职责
2013/12/31 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
Python 阶乘详解
2021/10/05 Python
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL