日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一、簡介

PDF文件是官方報告、發票和數據表的通用語言,然而從PDF文件中提取表格數據可能是一項挑戰。盡管Adobe Acrobat等工具提供了解決方案,但它們并不總是易于獲取或可自動化運行,而Python/ target=_blank class=infotextkey>Python則是編程語言中的瑞士軍刀。本文將探討如何利用Python輕松實現PDF數據提取,而無需使用昂貴的軟件。

二、了解挑戰

PDF文件是為展示而設計的,而不是為提取數據。它們通常包含復雜的布局,在視覺上很吸引人,但在計算上卻無法訪問。因此,提取表格等結構化信息非常困難。

三、使用PyMuPDF提取文本

PyMuPDF是一款輕量級的庫,擅長讀取PDF文件并提取文本。只需幾行代碼,就可以讀取PDF并從任意頁面提取文本。本文從奔馳集團2022年第四季度年度報告中提取“股東權益變動綜合報表(Consolidated Statement of Changes in Equity)”,代碼如下。

import fitz  
import pandas as pd
import re

# --- PDF處理 ---
# 定義PDF文件的路徑并打開文檔
pdf_path = '..../Merc 2022Q4 Rep.pdf'
pdf_document = fitz.open(pdf_path)

# 選擇要閱讀的特定頁面
page = pdf_document[200]

# 獲取頁面的尺寸
page_rect = page.rect
page_width, page_height = page_rect.width, page_rect.height

# 定義感興趣區域的矩形(不包括腳注)
non_footnote_area_height = page_height * 0.90
clip_rect = fitz.Rect(0, 0, page_width, non_footnote_area_height)

# 從定義的區域提取文本
page_text = page.get_text("text", clip=clip_rect)
lines_page = page_text.strip().split('n')

四、規整數據

提取的文本通常帶有不需要的字符或格式。這就是預處理發揮作用的地方。Python的字符串處理功能使用戶能夠清洗和準備數據以轉換為表格格式。

# --- 數據清洗 ---
# 定義要搜索的字符串并查找其索引
search_string = 'Balance at 1 January 2021 (restated) '
try:
    index = lines_page.index(search_string)
    data_lines = lines_page[index:]
except ValueError:
    print(f"The string '{search_string}' is not in the list.")
    data_lines = []

# 如果不是數字或連字符,則合并連續字符串條目
def combine_consecutive_strings(lines):
    combined = []
    buffer = ''
    
    for line in lines:
        if isinstance(line, str) and not re.match(r'^[-d,.]+$', line.strip()):
            buffer += ' ' + line if buffer else line
        else:
            if buffer:
                combined.Append(buffer)
                buffer = ''
            combined.append(line.strip())
    
    if buffer:
        combined.append(buffer)
    
    return combined

cleaned_data = combine_consecutive_strings(data_lines)

五、使用Pandas創建表格

一旦數據清洗完成,就可以使用pandas了。這個功能強大的數據分析庫可以將一系列數據點轉換為DataFrame,即一個二維的、大小可變的、可能是異構的帶有標記軸的表格數據結構。

# --- 創建DataFrame ---
# 根據列數將清洗后的數據分割成塊
num_columns = 6
data_chunks = [cleaned_data[i:i + num_columns] for i in range(0, len(cleaned_data), num_columns)]

# 定義DataFrame的表頭
headers = [
    'Description',
    'Share capital',
    'Capital reserves',
    'RetAIned earnings (restated)',
    'Currency translation (restated)',
    'Equity instruments / Debt instruments'
]

# 使用數據塊和表頭創建DataFrame
financial_df = pd.DataFrame(data_chunks, columns=headers)

# Display the head of the DataFrame to verify its structure
financial_df.head()

如下所示是從PDF文件中提取的表格結果。

用Python替代Adobe,零成本從PDF提取數據

六、結語

通過利用Python強大的庫,可以自動化繁瑣的PDF數據提取任務。這種方法不僅成本低,而且提供了Python開發者所喜愛的靈活性和強大功能。

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定