最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python把PDF表格完整轉換成Excel的小白教程

 更新時間:2026年04月26日 15:50:43   作者:CoderJoon  
本文通過一個完整的Python示例,詳細介紹了如何將多頁PDF表格轉換為Excel文件,文中包括整體思路、核心代碼解析、示例PDF模板及預期處理結果等內容,旨在幫助用戶理解和掌握PDF表格處理技巧,需要的朋友可以參考下

很多同學第一次接觸 PDF 數(shù)據(jù)處理時,都會遇到一個問題:

PDF 里的表格能看,不能算,不能統(tǒng)計。

比如:

  • 招聘成績公示
  • 學校成績單
  • 名單匯總表

本文將通過一個完整可運行的 Python 示例,一步一步教你:

如何把一個多頁 PDF 表格,穩(wěn)定地轉換成 Excel 文件

一、整體思路先說明(很重要)

在正式寫代碼前,你一定要明白一件事:

PDF ≠ Excel

  • Excel:天然是“行 + 列”
  • PDF:只是“排好版的頁面”

所以我們要做的是:

1. 從 PDF 中提取“表格結構”
2. 把每一行數(shù)據(jù)收集起來
3. 修復列數(shù)不一致的問題
4. 再導出為 Excel

二、完整代碼(先給結論)

下面是完整、可直接運行的代碼,后面我會逐步拆解講解。

import pdfplumber
import pandas as pd
import os
def pdf_to_excel(pdf_path, excel_path):
    all_rows = []
    # 打開 PDF
    with pdfplumber.open(pdf_path) as pdf:
        print(f"PDF共有 {len(pdf.pages)} 頁")
        # 遍歷每一頁
        for page_num, page in enumerate(pdf.pages, start=1):
            print(f"正在處理第 {page_num} 頁...")
            tables = page.extract_tables()
            if not tables:
                continue
            for table in tables:
                for row in table:
                    # 跳過全空行
                    if row and any(cell and cell.strip() for cell in row if isinstance(cell, str)):
                        all_rows.append(row)
    if not all_rows:
        print(" 未提取到任何表格數(shù)據(jù)")
        return
    # 計算最大列數(shù)
    max_cols = max(len(row) for row in all_rows)
    print(f"檢測到最大列數(shù):{max_cols}")
    # 統(tǒng)一所有行的列數(shù)
    normalized_rows = []
    for row in all_rows:
        if len(row) < max_cols:
            row = row + [None] * (max_cols - len(row))
        elif len(row) > max_cols:
            row = row[:max_cols]
        normalized_rows.append(row)
    # 第一行作為表頭
    header = normalized_rows[0]
    data = normalized_rows[1:]
    # 去除重復表頭行
    clean_data = []
    for row in data:
        if row != header:
            clean_data.append(row)
    # 構建 DataFrame
    df = pd.DataFrame(clean_data, columns=header)
    # 清理空行、空列
    df = df.dropna(how='all').dropna(axis=1, how='all')
    # 導出 Excel
    df.to_excel(excel_path, index=False, engine='openpyxl')
    print("\n 轉換完成")
    print(f"Excel 文件路徑:{excel_path}")
    print(f"數(shù)據(jù)行數(shù):{len(df)}")
    print(f"列數(shù):{len(df.columns)}")
    print("列名:", list(df.columns))
    print("\n前 5 行數(shù)據(jù)預覽:")
    print(df.head())
if __name__ == "__main__":
    pdf_file = "Example.pdf"
    excel_file = "Result.xlsx"
    if not os.path.exists(pdf_file):
        print(f"找不到 PDF 文件:{pdf_file}")
    else:
        pdf_to_excel(pdf_file, excel_file)

三、逐步解析代碼(小白重點)

1、導入庫

import pdfplumber
import pandas as pd
import os

作用說明:

作用
pdfplumber讀取 PDF、提取表格
pandas處理表格數(shù)據(jù)
os判斷文件是否存在

2、定義核心函數(shù)

def pdf_to_excel(pdf_path, excel_path):

這個函數(shù)只做一件事:

把一個 PDF 表格文件,轉換成 Excel

3、收集所有表格行

all_rows = []

為什么要這樣做?

因為 PDF 是一頁一頁的,
但 Excel 是一個整體表格。

4、打開 PDF 并逐頁處理

with pdfplumber.open(pdf_path) as pdf:
  • pdf.pages:PDF 的每一頁
  • extract_tables():提取當前頁中的表格

5、跳過空行(非常關鍵)

if row and any(cell and cell.strip() for cell in row if isinstance(cell, str)):

作用:

  • 防止空行進入 Excel
  • 防止生成一堆沒用的數(shù)據(jù)

6、為什么要“統(tǒng)一列數(shù)”(核心思想)

max_cols = max(len(row) for row in all_rows)

現(xiàn)實中的 PDF 表格:

  • 有的頁 8 列
  • 有的頁 9 列
  • 有的頁 10 列

如果不統(tǒng)一,pandas 會直接報錯

所以我們要:

不足的補 None,多的截斷

7、第一行作為表頭

header = normalized_rows[0]

PDF 表格通常每一頁都有表頭,
我們只保留第一行作為最終列名。

8、去掉重復表頭行

if row != header:
    clean_data.append(row)

否則 Excel 會變成:

職位代碼 | 職位名稱 | ...
職位代碼 | 職位名稱 | ...
職位代碼 | 職位名稱 | ...

9、導出 Excel

df.to_excel(excel_path, index=False, engine='openpyxl')

這一步就是真正生成 Excel 文件。

四、示例 PDF 模板(示意)

假設你的 PDF 表格內容長這樣(每一頁類似):

職位代碼職位名稱準考證號考場號座位號成績
00001A001A000102012178.25
00001A001A000101011182.50

五、預期 Excel 處理結果

最終生成的 Excel 表格應為:

職位代碼職位名稱準考證號考場號座位號成績
00001A001A000102012178.25
00001A001A000101011182.50

一人一行,可直接統(tǒng)計、排序、篩選

六、這個程序能做什么 / 不能做什么

能處理

  • 多頁 PDF 表格
  • 列數(shù)不一致
  • 招聘、公示、成績類 PDF

不能處理

  • 掃描版 PDF(圖片)
  • 完全靠空格排版的“假表格”

七、總結一句話

PDF → Excel 的難點不在“讀取”,而在“結構修復”。

這份代碼已經(jīng)解決了:

  • 多頁
  • 表頭重復
  • 列數(shù)不一致

以上就是Python把PDF表格完整轉換成Excel的小白教程的詳細內容,更多關于Python PDF表格轉成Excel的資料請關注腳本之家其它相關文章!

相關文章

  • python 實現(xiàn)交換兩個列表元素的位置示例

    python 實現(xiàn)交換兩個列表元素的位置示例

    今天小編就為大家分享一篇python 實現(xiàn)交換兩個列表元素的位置示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 使用Python繪制動態(tài)愛心并表白的代碼詳解

    使用Python繪制動態(tài)愛心并表白的代碼詳解

    在這個充滿浪漫的季節(jié),如何用代碼表達你的愛意呢?今天我們將使用 Python 的 matplotlib 和 numpy 庫繪制一個動態(tài)的愛心,并且在愛心上添加表白的文字,這將是一個獨特而浪漫的方式來表達你的心聲,感興趣的小伙伴跟著小編來看看吧
    2025-04-04
  • python事件驅動event實現(xiàn)詳解

    python事件驅動event實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了python事件驅動event實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • LangChain簡化ChatGPT工程復雜度使用詳解

    LangChain簡化ChatGPT工程復雜度使用詳解

    這篇文章主要為大家介紹了LangChain簡化ChatGPT工程復雜度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • numpy 對矩陣中Nan的處理:采用平均值的方法

    numpy 對矩陣中Nan的處理:采用平均值的方法

    今天小編就為大家分享一篇numpy 對矩陣中Nan的處理:采用平均值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python中b=a和b=a[:]區(qū)別小結

    python中b=a和b=a[:]區(qū)別小結

    Python中b = a和b = a[:]有顯著區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Python中函數(shù)參數(shù)匹配模型詳解

    Python中函數(shù)參數(shù)匹配模型詳解

    這篇文章主要介紹了Python函數(shù)參數(shù)匹配模型,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Python利用字典和列表實現(xiàn)學生信息管理系統(tǒng)

    Python利用字典和列表實現(xiàn)學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Python如何利用字典和列表實現(xiàn)一個簡易的學生信息管理系統(tǒng),文中詳細注釋,方便理解,需要的可以參考一下
    2022-06-06
  • Mac PyCharm中的.gitignore 安裝設置教程

    Mac PyCharm中的.gitignore 安裝設置教程

    這篇文章主要介紹了Mac PyCharm中的.gitignore 安裝設置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 基于PyQt5完成的PDF拆分功能

    基于PyQt5完成的PDF拆分功能

    這篇文章主要介紹了基于PyQt5完成的PDF拆分功能,本文介紹的pdf拆分功能還有一些待完善地方,例如可增加預覽功能,實現(xiàn)每頁預覽,以及如何實現(xiàn)多條件拆分,需要的朋友可以參考下
    2022-06-06

最新評論

襄垣县| 兰溪市| 榕江县| 兴文县| 南宁市| 宿迁市| 吉林市| 玉田县| 塔河县| 阿图什市| 东至县| 荔浦县| 葵青区| 五大连池市| 南京市| 黎城县| 通海县| 永吉县| 安康市| 柳江县| 宁海县| 虞城县| 新巴尔虎左旗| 三穗县| 新沂市| 隆化县| 茂名市| 土默特左旗| 婺源县| 靖边县| 余姚市| 安多县| 龙泉市| 清镇市| 新和县| 海安县| 新绛县| 安宁市| 华阴市| 浦县| 武功县|