软件测试|教你用Python处理PDF文件(四)

举报
霍格沃兹测试开发 发表于 2023/08/09 18:23:45 2023/08/09
【摘要】 前言之前我们介绍了从PDF文件中提取文本内容以及从PDF文件提取图片的方法,除了文本内容与图片,表格也PDF文件中常见的内容,提取表格内容时,我们不再使用PyPDF2库来实现操作,Python有多个库来实现提取表格内容,本文我们将分别介绍多个库提取PDF中表格的操作。 pdfplumberpdfplumber是读取PDF文件文本和表格提取的第三方库中,功能最均衡的一个,它主要有以下优点:每...

image.png

前言

之前我们介绍了从PDF文件中提取文本内容以及从PDF文件提取图片的方法,除了文本内容与图片,表格也PDF文件中常见的内容,提取表格内容时,我们不再使用PyPDF2库来实现操作,Python有多个库来实现提取表格内容,本文我们将分别介绍多个库提取PDF中表格的操作。

pdfplumber

pdfplumber是读取PDF文件文本和表格提取的第三方库中,功能最均衡的一个,它主要有以下优点:

  • 每页单独对象,支持文本、表格数据的抽取(亮点)
  • 文本抽取:保留了文本的格式,比如换行位置有空格,可以通过这个特点将一段的文本整合
  • 表格数据抽取:不会被换行数据所干扰

但是,它也不是完美的,缺点如下:

  • 进行文本抽取时,如果一页有文本和表格,那么抽取的文本数据也会包括表格数据
  • 对于有合并单元格的表格,无法还原表格结构
  • 表格数据不能100%保证和原数据一致,可能缺少几个字,可能识别出错等
  • 对于无边框的表格,处理效果很差
  • 流程图和时序图会对处理产生严重影响

使用示例:

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%准确
  • 对于无边界表格支持不好,丢失数据

代码如下:

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会更为理想一些。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。