【Camelot】| 从 PDF 中抽取表格
官方文档:https://camelot-py.readthedocs.io/en/master/
系统:Windows10
环境:
Python 3.8.7
PyCharm 2020.3
安装
安装依赖
Ghostscript
选择相应的系统和版本进行下载与安装
Tkinter
Python 3.2 版本之后自动安装 Tkinter。因此安装了相应的 Python 版本则无需安装 Tkinter
可以通过以下代码验证
import tkinter tkinter._test()
安装Camelot
在虚拟环境中使用 pip 进行安装
pip install "camelot-py[cv]"
[cv] 不要省略
检查是否安装成功
import camelot print(camelot.__version__)
除了使用 pip 的方式,还可以通过 conda 和 `源码` 进行安装
conda安装
conda install -c conda-forge camelot-py
源码安装
克隆 Github 仓库
git clone https://www.github.com/camelot-dev/camelot
使用 pip 进行安装
cd camelot pip install ".[cv]"
Quickstart
读取 PDF
1.检测表格
打开 PyCharm,新建一个项目,输入以下代码
import camelot
tables = camelot.read_pdf(r'D:/foo.pdf')
print(tables)
导入 camelot 包
读取 D 盘下的 foo.pdf 文件,返回 TableList,它是 Table 对象的列表(List)
输出结果:<TableList n=1> 表明 TableList 中只有一个 Table 对象,即表明在这个 PDF 文件中检测出了一个表格
2.访问 Table 对象
通过下标,我们可以访问 TableList 中的 Table 对象。
print(tables[0])
输出结果:<Table shape=(13, 8)> 表明第一个 Table 对象是一个 13行 × 8列 的表格
3.解析报告
通过 parsing_report()
方法,打印出解析报告
print(tables[0].parsing_report)
输出结果:
{
‘accuracy’: 99.02,
‘whitespace’: 12.24,
‘order’: 1,
‘page’: 1
}
当 accuracy
值越大, whitespace
值越小时,表明正确抽出表格的成功率越高
4.DataFram 格式
通过 df()
方法,将 Table 对象转换为 DataFrame 后,我们就可以通过 Pandas 来处理表格。
tables[0].df
5.导出表格
1. 单表格导出
通过以下方法,可以将表格导出为对应的形式:
- to_csv()
- to_json()
- to_execl()
- to_html()
- to_sqlite()
tables[0].to_csv('foo.csv')
执行上面这行程序,表格会以 csv
类型 存储在 项目根路径 下
2. 多表格导出
通过 export()
方法,进行多表格导出
tables.export('foo.csv', f='csv')
文件类型参数可以设置为:f='json'
, f='execl'
, f='html'
, f='sqlite'
。
当有非常多的表格需要导出时,可以加上
compress=True
参数,表格将会被打包成压缩文件导出。
指定页码
默认情况下,Cmaelot 只会抽取 PDF 第一页的表格,指定页码需要使用 pages
参数
camelot.read_pdf('your.pdf', pages='1,2,3')
pages
参数也可以设置为一个 页码范围
pages='1,4-10,20-30'
pages='1,4-10,20-end'
读取加密 PDF
使用 password
参数来读取加密 PDF
tables = camelot.read_pdf('foo.pdf', password='userpass')
高级使用
识别调试
调试的 plot()
方法依赖于 matplotlib ,我们需要安装依赖
pip install camlot-py[plot]