python+camelot库:提取pdf中的表格数据
camelot库支持将pdf中提取到的表格数据转为不同格式的文件保存。
安装:pip install camelot-py
运行报错处理,出现报错:from .core import TableList
ImportError: cannot import name 'TableList' from 'camelot.core' (E:\python\lib\site-packages\camelot\core\__init__.py)
原因是同时安装了camelot 和 camelot-py导致,卸载掉其中一个,两个库的用法一样。
支持将读取到的表格数据转为以下格式的文件:"csv", "html", "json", "markdown", "excel", "sqlite"
read_pdf参数:
filepath:pdf文件对象。
process_background:背景线处理(process_background=True)。
pages:要提取表格的页面范围,可以是单个页面或多个页面,如值为‘1-4’,表示1到4页,如写成‘1,4,6’表示提取第1,第4,第6页的数据。
flavor:PDF解析器的类型,默认为"lattice",常用选择"stream"。
table_areas:要提取表格的区域范围,可以是单个区域或区域范围的列表[x1,y1,x2,y2]。
password:如果PDF文件有密码,需要提供密码。
import camelot
def read_pdf_tables(pdf_path):
tables = camelot.read_pdf(pdf_path, pages='1,3,6', flavor='stream', table_areas=['100,600,600,100'])
tables.export(fr'{pdf_path.split(".")[0]}.html') # 一次性将所有读取到的数据转为对应格式的文件
for tb in tables:
# 将单个页面提取到的数据转为对应格式的文件
# tb.to_csv(fr'{pdf_path.split(".")[0]}.csv')
# tb.to_html(fr'{pdf_path.split(".")[0]}.html')
# tb.to_json(fr'{pdf_path.split(".")[0]}.json')
# tb.to_markdown(fr'{pdf_path.split(".")[0]}.md')
# tb.to_sqlite(fr'{pdf_path.split(".")[0]}.db')
print(tb.df) # 打印数据
print(tb.data) # 列表数据形式打印获取到的数据
# 打印没行,每列,每个单元格的位置
print(tb.rows)
print(tb.cols)
print(tb.cells)