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

2023-08-09 18:24:24 浏览数 (1)

前言

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

pdfplumber

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

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

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

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

使用示例:

代码语言:python代码运行次数:0复制
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%准确
  • 对于无边界表格支持不好,丢失数据

代码如下:

代码语言:txt复制
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会更为理想一些。

0 人点赞