在日常的數據處理工作中,我們經常會遇到需要從 PDF 文件中提取表格數據的需求。PDF 文件由于其格式的復雜性,直接提取其中的表格數據并不像處理 Excel 或 CSV 文件那樣簡單。然而,借助 Python 的強大庫,我們可以相對輕松地完成這項任務。本文將介紹如何使用 Python 提取 PDF 文件中的表格數據。
在開始之前,我們需要安裝一些必要的 Python 庫。這些庫將幫助我們解析 PDF 文件并提取其中的表格數據。
pip install PyMuPDF
pip install pdfplumber
pip install pandas
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)
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)
為了更方便地處理表格數據,我們可以將其轉換為 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)
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)
與 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)
在實際應用中,PDF 文件中的表格結構可能非常復雜,包含合并單元格、嵌套表格等。對于這些情況,我們需要更復雜的解析方法。
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)
對于嵌套表格,我們可以通過遞歸的方式提取每一層的表格數據。
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)
通過使用 Python 的 PyMuPDF 和 pdfplumber 庫,我們可以相對輕松地從 PDF 文件中提取表格數據。對于簡單的表格結構,直接使用這些庫即可完成任務。對于復雜的表格結構,我們需要結合字符串處理、遞歸等方法進行更精細的解析。
在實際應用中,PDF 文件的格式千差萬別,因此我們需要根據具體情況調整解析方法。希望本文的介紹能夠幫助你更好地處理 PDF 表格數據提取的任務。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。