Python 中怎么提取 PDF 表格数据

发布时间:2021-07-10 11:22:47 作者:Leah
来源:亿速云 阅读:243

Python 中怎么提取 PDF 表格数据

在日常的数据处理工作中,我们经常会遇到需要从 PDF 文件中提取表格数据的需求。PDF 文件由于其格式的复杂性,直接提取其中的表格数据并不像处理 Excel 或 CSV 文件那样简单。然而,借助 Python 的强大库,我们可以相对轻松地完成这项任务。本文将介绍如何使用 Python 提取 PDF 文件中的表格数据。

1. 准备工作

在开始之前,我们需要安装一些必要的 Python 库。这些库将帮助我们解析 PDF 文件并提取其中的表格数据。

pip install PyMuPDF
pip install pdfplumber
pip install pandas

2. 使用 PyMuPDF 提取表格数据

PyMuPDF 是一个功能强大的 PDF 解析库,可以用于提取 PDF 中的文本、图像和表格。下面是一个简单的示例,展示如何使用 PyMuPDF 提取 PDF 中的表格数据。

import fitz  # PyMuPDF

def extract_tables_with_pymupdf(pdf_path):
    doc = fitz.open(pdf_path)
    tables = []
    
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        text = page.get_text("text")
        # 这里假设表格数据是以某种格式的文本呈现的
        # 你可以根据实际情况进行解析
        tables.append(text)
    
    return tables

pdf_path = "example.pdf"
tables = extract_tables_with_pymupdf(pdf_path)
for table in tables:
    print(table)

2.1 解析表格数据

PyMuPDF 提取的表格数据通常是纯文本格式的,因此我们需要根据表格的结构进行解析。例如,如果表格数据是以制表符或逗号分隔的,我们可以使用 Python 的字符串处理方法来解析数据。

def parse_table_data(table_text):
    rows = table_text.split("\n")
    table_data = []
    
    for row in rows:
        columns = row.split("\t")  # 假设表格数据是以制表符分隔的
        table_data.append(columns)
    
    return table_data

parsed_tables = [parse_table_data(table) for table in tables]
for table in parsed_tables:
    print(table)

2.2 将表格数据转换为 DataFrame

为了更方便地处理表格数据,我们可以将其转换为 pandas 的 DataFrame。

import pandas as pd

def convert_to_dataframe(table_data):
    return pd.DataFrame(table_data)

dataframes = [convert_to_dataframe(table) for table in parsed_tables]
for df in dataframes:
    print(df)

3. 使用 pdfplumber 提取表格数据

pdfplumber 是一个专门用于从 PDF 中提取表格数据的库,它支持复杂的表格结构。下面是一个使用 pdfplumber 提取表格数据的示例。

import pdfplumber

def extract_tables_with_pdfplumber(pdf_path):
    tables = []
    
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            table = page.extract_table()
            if table:
                tables.append(table)
    
    return tables

pdf_path = "example.pdf"
tables = extract_tables_with_pdfplumber(pdf_path)
for table in tables:
    print(table)

3.1 将表格数据转换为 DataFrame

与 PyMuPDF 类似,我们可以将 pdfplumber 提取的表格数据转换为 pandas 的 DataFrame。

import pandas as pd

def convert_to_dataframe(table_data):
    return pd.DataFrame(table_data[1:], columns=table_data[0])

dataframes = [convert_to_dataframe(table) for table in tables]
for df in dataframes:
    print(df)

4. 处理复杂的表格结构

在实际应用中,PDF 文件中的表格结构可能非常复杂,包含合并单元格、嵌套表格等。对于这些情况,我们需要更复杂的解析方法。

4.1 处理合并单元格

pdfplumber 提供了处理合并单元格的功能。我们可以通过设置 table_settings 参数来调整表格提取的精度。

import pdfplumber

def extract_complex_tables(pdf_path):
    tables = []
    
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            table = page.extract_table(table_settings={
                "vertical_strategy": "text",
                "horizontal_strategy": "text"
            })
            if table:
                tables.append(table)
    
    return tables

pdf_path = "complex_example.pdf"
tables = extract_complex_tables(pdf_path)
for table in tables:
    print(table)

4.2 处理嵌套表格

对于嵌套表格,我们可以通过递归的方式提取每一层的表格数据。

def extract_nested_tables(table_data):
    nested_tables = []
    
    for row in table_data:
        for cell in row:
            if isinstance(cell, list):
                nested_tables.append(cell)
    
    return nested_tables

nested_tables = extract_nested_tables(tables)
for table in nested_tables:
    print(table)

5. 总结

通过使用 Python 的 PyMuPDF 和 pdfplumber 库,我们可以相对轻松地从 PDF 文件中提取表格数据。对于简单的表格结构,直接使用这些库即可完成任务。对于复杂的表格结构,我们需要结合字符串处理、递归等方法进行更精细的解析。

在实际应用中,PDF 文件的格式千差万别,因此我们需要根据具体情况调整解析方法。希望本文的介绍能够帮助你更好地处理 PDF 表格数据提取的任务。

推荐阅读:
  1. Python如何快速处理PDF表格数据
  2. python爬虫库有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:C# 7.0中解构功能的示例分析

下一篇:python 中怎么利用pandas 连接mysql数据库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》