溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 中怎么提取 PDF 表格數據

發布時間:2021-07-10 11:22:47 來源:億速云 閱讀:272 作者:Leah 欄目:大數據

Python 中怎么提取 PDF 表格數據

在日常的數據處理工作中,我們經常會遇到需要從 PDF 文件中提取表格數據的需求。PDF 文件由于其格式的復雜性,直接提取其中的表格數據并不像處理 Excel 或 CSV 文件那樣簡單。然而,借助 Python 的強大庫,我們可以相對輕松地完成這項任務。本文將介紹如何使用 Python 提取 PDF 文件中的表格數據。

1. 準備工作

在開始之前,我們需要安裝一些必要的 Python 庫。這些庫將幫助我們解析 PDF 文件并提取其中的表格數據。

pip install PyMuPDF
pip install pdfplumber
pip install pandas
  • PyMuPDF:一個功能強大的 PDF 解析庫,可以用于提取 PDF 中的文本、圖像和表格。
  • pdfplumber:一個專門用于從 PDF 中提取表格數據的庫,支持復雜的表格結構。
  • 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 表格數據提取的任務。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女