@Author:Runsen
最近认识了一位漂亮同级的学姐,当学姐确定研究生录取的那一刻,以为即将走上人生巅峰
结果毕业论文还没写,从此开启了写论文之路。
于是高高兴兴地去知网下载论文和图表,结果知网不友好,提供了全是CAJ和PDF格式。
学姐只好一张一张的从PDF复制下面
学姐说:这不就是CV大法吗?
当学姐复制到Excel,瞬变爆炸!
结果一行就复制粘贴完成了,一个论文足足有13个表,头疼了一晚。
于是,第二天通过闲鱼认识了我i,艾特我能不能帮她将几篇论文的表提取到excel中,正所谓面子最重要,其实我啥也不会,在茫茫的互联网中寻找方法,发现还是写代码简单粗暴。于是,就发现了Camelot
Camelot
Camelot是一个Python库和一个命令行工具,它可以轻松提取出在PDF文件中的数据表,查看其官方文档和Github存储库。
安装camelot
pip install camelot-py
报错,那肯定需要安装ghostscript第三方模块:pip install ghostscript
这里,还需要在Windows 10上安装ghostscript exe后运行:https://www.ghostscript.com/download/gsdnld.html
C:\Users\Administrator>python
Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activationType "help", "copyright", "credits" or "license" for more information.
>>> from ctypes.util import find_library
>>> find_library("gs")
'libgs.so.9'
>>>
下面 打开一个新的Python文件,在当前目录中有一个PDF文件,名为“ 123456.pdf”,这是一个普通的PDF页面,其中包含很多张表。让我们在Python中提取它:
import camelot
file = "123456.pdf"
tables = camelot.read_pdf(file)
read_pdf()
函数提取PDF文件中的所有表,将该表打印为Pandas DataFrame
# 将第一个表打印为Pandas DataFrame
print(tables[0].df)
# 导出为CSV
tables[0].to_csv("123456.csv")
# 分别导出为Excel(扩展名为.xlsx)
tables[0].to_excel("123456.xlsx")
# 全部以zip格式导出
tables.export("123456.csv", f="csv", compress=True)
Tabula
学姐说安装有点复杂,有没有简单的方法,当然有啊,除了Camelot,Tabula也可以轻松提取出在PDF文件
安装非常简单
pip install tabula-py
具体实现的代码如下所示
import tabula
import os
tables = tabula.read_pdf("123456.pdf", pages="all")
# 将它们保存在文件夹中
folder_name = "tables"
if not os.path.isdir(folder_name):os.mkdir(folder_name)
# 迭代提取的表并分别导出为excel
for i, table in enumerate(tables, start=1):table.to_excel(os.path.join(folder_name, f"table_{i}.xlsx"), index=False)# 将PDF文件的所有表转换为单个CSV文件
# 支持的output_formats是“ csv”,“ json”或“ tsv
tabula.convert_into("123456.pdf", "output.csv", output_format="csv", pages="all")
# 将文件夹中的所有PDF转换为CSV格式
# pdfs文件夹应该存在于当前目录中
tabula.convert_into_by_batch("pdfs", output_format="csv", pages="all")
学姐说好妙啊,头疼了一晚,遇见我真的幸运啊
那是当然,学姐说,那我要好好的关注你了。
感谢学姐的关注,你们呢?