python取出表格_表哥表姐不要愁!5分钟学会用Python从PDF提取表格table

"600300,维维股份,000620,新华联,600090,同济堂,000157,中联重科",2019年上半年财报密集发布!

遇到财报发布的季节了,表哥表姐发愁啊,为什么都是PDF的,还有这么多,周末的安排又泡汤呢?

54fbb2fb43166d22ab08d52e249df4f39152d255.jpeg?token=644be9330d05b1976325e509cc0151f3&s=326269A04321A0EB4ADDAC9B03004083

很多时候我们需要用到PDF文件中的Excel表格,但是PDF文件有不可编辑性,所以想提取PDF文件中的表格还是需要一番功夫的。这是加班都搞不定的!

不要愁,Python大大又来帮助表哥表姐了。不仅教表哥表姐如何提取表格数据,而且还是自动档,一次编写,批量文件几分钟就搞定。

以下将介绍几种使用Python从PDF中抓取表格的方法。友情提示:仅适用于非扫描图像的PDF。

Tabula-PY

a044ad345982b2b72fca1cac521336eb77099b40.jpeg?token=256f62a7fdd31e25241ddb3cee40f404&s=4912ED13C7274F09166DD4C60100C0A3

是一个非常好的软件包,它允许您同时扫描PDF,以及将PDF直接转换为CSV文件。

安装后,tabula-py很容易使用。安装后,tabula-py很容易使用。下面我们使用它从讨论Iris数据集的分类的论文中提取所有表格)。

import tabula file = "seminar8.pdf" tables = tabula.read_pdf(file, pages = "all", multiple_tables = True)

存储到表中的结果是一个数据框列表,它对应于PDF文件中找到的所有表。要搜索文件中的所有表,您必须指定参数page ="all"和multiple_tables = True。

还可以使用tabula-py将PDF文件直接转换为CSV。下面的第一行将找到PDF中的第一个表并将其输出为CSV。如果我们添加参数all = True,我们可以将所有PDF表格写入CSV。

# output just the first table in the PDF to a CSVtabula.convert_into(file, "iris_first_table.csv") # output all the tables in the PDF to a CSVtabula.convert_into(file, "iris_all.csv", all = True)

tabula-py还可以仅用一行代码读取目录中的所有PDF,并将每个表中的表提取到CSV文件中。

tabula.convert_into_by_batch("/path/to/files", output_format = "csv", pages = "all")

我们可以执行相同的操作,将表格提取到JSON,如下所示。

tabula.convert_into_by_batch("/path/to/files", output_format = "json", pages = "all")

Camelot

是从PDF中抓取表格的另一种解决方案。

Camelot确实有一些额外的依赖项,包括GhostScript安装完成后,我们可以像使用tabula-py一样使用Camelot来抓取PDF表格。

file = "seminar8.pdf" tables = camelot.read_pdf(file, pages = "1-end")

这将返回TableList对象。要访问index找到的任何表,您可以这样做:

# get the 0th-indexed-table tabletables[0].df# get the 3rd-indexed-tabletables[3].df

Camelot的一个很酷的功能是,您还可以获得每个表的"解析报告",其中包含精确度指标,找到表格的页面以及表格中存在的空白百分比。

tables[0].parsing_reporttables[3].parsing_report

622762d0f703918f777ef1073083db935beec490.jpeg?token=547422984fdd67d33b4d5d5e7bf24290&s=1141BB4ADBA49B7040DC4504000070C2

从这里可以看到第0个索引的已识别表基本上是空白。如果查看原始PDF,可以看到该页面未包含表格,因此忽略此空数据框是安全的。

与tabula-py一样,您可以将所有表导出到文件中。 Camelot支持(撰写本文时)CSV,JSON,HTML和SQLite。如果选择CSV,默认情况下,Camelot将为每个表创建单独的CSV文件。您可以通过添加参数compress = True来创建这些CSV的zip文件。选择导出到Excel将创建一个包含每个表的单个工作表的工作簿。

# export all tables at once to CSV filestables.export("camelot_tables.csv", f = "csv")# export all tables at once to CSV files in a single ziptables.export("camelot_tables.csv", f = "csv", compress = True)# export each table to a separate worksheet in an Excel filetables.export("camelot_tables.xlsx", f = "excel")

如果只想导出一个表,就可以像在pandas中那样导出,因为每个表都可以称为数据框对象。

tables[3].to_csv("camelot_third_table.csv")tables[3].to_excel("camelot_third_table.xlsx")

Excalibur

如果您正在寻找用于提取PDF表格的Web应用,您可以查看构建在Camelot之上的Excalibur。

7acb0a46f21fbe09b049fd6609def1378644adf4.jpeg?token=16e40c85d8710921ac00ebd4c2c658a4&s=0943C41206A37EAA6A8BA8CC0300F0AA

您可以从命令行开始使用Excalibur。打开命令行后,只需键入以下内容:

excalibur initdb

上面的命令将初始化应用程序所需的元数据库。接下来,运行以下命令以通过Flask启动Web服务器:

excalibur webserver

然后您打开Web浏览器,输入127.0.0.1:5000,可以看到如下界面。

b3fb43166d224f4ae571535b6b496d569a22d1d5.jpeg?token=b8681b3dd038db7b4bf0690c3ebcc52c&s=48A03D72CD706C03585D41CF0000A0B2

点Upload PDF,上传选择的PDF文件后,Excalibur将完成其余所有的工作。

表哥表姐,不用发愁了吧!

有任何意见或建议欢迎大家点赞交流。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值