软件测试|教你用Python处理PDF文件(四)
前言
之前我们介绍了从PDF文件中提取文本内容以及从PDF文件提取图片的方法,除了文本内容与图片,表格也PDF文件中常见的内容,提取表格内容时,我们不再使用PyPDF2库来实现操作,Python有多个库来实现提取表格内容,本文我们将分别介绍多个库提取PDF中表格的操作。
pdfplumber
pdfplumber是读取PDF文件文本和表格提取的第三方库中,功能最均衡的一个,它主要有以下优点:
- 每页单独对象,支持文本、表格数据的抽取(亮点)
- 文本抽取:保留了文本的格式,比如换行位置有空格,可以通过这个特点将一段的文本整合
- 表格数据抽取:不会被换行数据所干扰
但是,它也不是完美的,缺点如下:
- 进行文本抽取时,如果一页有文本和表格,那么抽取的文本数据也会包括表格数据
- 对于有合并单元格的表格,无法还原表格结构
- 表格数据不能100%保证和原数据一致,可能缺少几个字,可能识别出错等
- 对于无边框的表格,处理效果很差
- 流程图和时序图会对处理产生严重影响
使用示例:
Bash
import pdfplumber
file = 'files/test.pdf'
wookroot = pdfplumber.open(file)
pages = wookroot.pages
for page in pages:
text = page.extract_text()
tables = page.extract_tables()
print(text)
print(tables)
break
wookroot.close()
tablua
tabula-py是专门用于提取PDF表格数据的第三方库,它具有以下优点:
- 抽取出来表格数据可以反向推导出表格的结构(亮点)
- 不会被换行数据干扰
- 可以指定页读取
同样地,这个库也有固有的缺点:
- 无法保证表格数据100%准确
- 对于无边界表格支持不好,丢失数据
代码如下:
Bash
import tabula
def extract_tables_from_pdf(pdf_path):
tables = tabula.read_pdf(pdf_path, pages='all')
return tables
# 使用示例
pdf_path = 'files/test.pdf' # 替换为实际的PDF文件路径
extracted_tables = extract_tables_from_pdf(pdf_path)
# 输出提取的表格
for i, table in enumerate(extracted_tables, start=1):
print(f"Table {i}:")
print(table)
print()
-------------------------------
输出结果如下:
Table 1:
队名 队长 球场
0 拜仁慕尼黑 托马斯穆勒 安联球场
1 多特蒙德 罗伊斯 威斯特法伦球场
注:使用tabula时,我们安装的库为tabula-py,导入时为tabula。
总结
本文主要介绍了Python提取PDF表格内容的方法,如果我们只提取表格内容的话,使用tabula-py会更为理想一些。
相关文章
- Java接口安全:SpringBoot防护XSS/SQL/重放攻击
- Springboot之登录模块探索(含Token,验证码,网络安全等知识)
- JAVA装饰器模式适用场景,优缺点是什么你知道吗这篇文章彻底讲透
- TestNG 中使用 Guice 来进行依赖注入
- 测试开发之自动化篇-Appium脚本开发
- 深入探索FastAPI单元测试:使用TestClient轻松测试你的API
- python单元测试框架之unittest和pytest的区别
- 要供暖了,壁挂炉怎么调?注意这四点,省气还少出问题
- 掌握Python中的单元测试:详尽指南与unittest
- 《shell》算术表达式-test测试语句-if流程语句