Python提取PDF表格數(shù)據(jù)并導出為TXT、Excel?格式
在數(shù)據(jù)處理與辦公自動化場景中,PDF 表格因格式穩(wěn)定被廣泛使用,但不可直接編輯的特性,給數(shù)據(jù)統(tǒng)計、分析和二次加工帶來諸多不便。手動復制粘貼不僅效率低下,還容易出現(xiàn)數(shù)據(jù)錯位、遺漏等問題。
本文將分享一種高效的解決方案—基于Python結(jié)合Spire系列庫,實現(xiàn) PDF 表格數(shù)據(jù)的精準提取,并分別導出為 TXT 文本和 Excel 表格格式。該方案無需復雜的正則表達式或OCR識別,代碼簡潔易上手,適合批量處理各類PDF表格文件。
一、準備工作:安裝所需 Python 庫
本次實戰(zhàn)需要兩個核心庫,分別負責 PDF 表格提取和 Excel 文件生成,功能分工明確:
- Spire.PDF for Python:一款輕量級 PDF 處理庫,支持直接識別 PDF 中的表格結(jié)構(gòu),精準提取單元格數(shù)據(jù),無需依賴額外的 OCR 工具。
- Spire.XLS for Python:專業(yè)的 Excel 操作庫,可實現(xiàn) Excel 文件的創(chuàng)建、數(shù)據(jù)寫入、格式優(yōu)化等功能,完美適配各類 Excel 版本。
打開命令行終端,執(zhí)行以下pip命令完成安裝(建議在虛擬環(huán)境中操作,避免版本沖突):
pip install Spire.PDF pip install Spire.XLS
二、實戰(zhàn)1:提取 PDF 表格數(shù)據(jù)到 TXT 文件
TXT 文件具有體積小、兼容性強的特點,適合快速查看和傳輸數(shù)據(jù)。使用 Spire.PDF for Python 提取數(shù)據(jù)并寫入 TXT 的核心邏輯,是按頁面→表格→行→列的層級遍歷 PDF 內(nèi)容,最終將數(shù)據(jù)格式化輸出。
實現(xiàn)步驟拆解
- 加載 PDF 文檔:通過
PdfDocument類的LoadFromFile()方法讀取目標 PDF 文件,支持相對路徑和絕對路徑。 - 初始化提取工具:創(chuàng)建
PdfTableExtractor對象,用于識別并提取 PDF 頁面中的表格數(shù)據(jù)。 - 層級遍歷數(shù)據(jù):依次遍歷 PDF 的每一頁、每頁中的每個表格、表格的每一行和每一列,通過
GetText(rowIndex, columnIndex)方法獲取單元格文本。 - 寫入 TXT 文件:將提取的數(shù)據(jù)按“列用空格分隔、行用換行分隔”的格式整理,寫入TXT文件并指定 UTF-8 編碼,避免中文亂碼。
完整代碼示例(含詳細注釋)
from spire.pdf.common import *
from spire.pdf import *
# 1. 加載PDF文檔,替換為你的目標PDF文件路徑
pdf_doc = PdfDocument()
pdf_doc.LoadFromFile("表格.pdf")
# 2. 創(chuàng)建列表存儲提取的數(shù)據(jù),便于后續(xù)拼接
data_list = []
# 3. 初始化表格提取器
table_extractor = PdfTableExtractor(pdf_doc)
# 4. 遍歷PDF的每一頁
for page_idx in range(pdf_doc.Pages.Count):
# 提取當前頁面的所有表格
tables = table_extractor.ExtractTable(page_idx)
# 判斷當前頁面是否存在表格,避免空指針異常
if tables is not None and len(tables) > 0:
# 遍歷每個表格
for table in tables:
row_num = table.GetRowCount() # 獲取表格總行數(shù)
col_num = table.GetColumnCount() # 獲取表格總列數(shù)
# 遍歷表格的每一行
for i in range(row_num):
row_data = []
# 遍歷該行的每一列
for j in range(col_num):
# 獲取單元格文本
cell_text = table.GetText(i, j)
row_data.append(cell_text)
# 用空格分隔列數(shù)據(jù),拼接成一行
data_list.append(" ".join(row_data))
# 不同表格之間添加空行,區(qū)分數(shù)據(jù)邊界
data_list.append("")
# 5. 將數(shù)據(jù)寫入TXT文件
with open("提取PDF表格.txt", "w", encoding="utf-8") as f:
f.write("\n".join(data_list))
# 6. 釋放資源,避免內(nèi)存占用
pdf_doc.Close()
三、實戰(zhàn)2:提取 PDF 表格數(shù)據(jù)到 Excel 文件
Excel 文件支持數(shù)據(jù)篩選、公式計算、圖表生成等高級功能,是數(shù)據(jù)分析的首選格式。本示例需要結(jié)合 Spire.PDF for Python 和 Spire.XLS for Python,在提取數(shù)據(jù)的基礎上,實現(xiàn) Excel 文件的創(chuàng)建和數(shù)據(jù)寫入。
實現(xiàn)步驟拆解
數(shù)據(jù)提取的步驟與 TXT 示例一致,額外增加 Excel 文件操作的3個核心步驟:
- 創(chuàng)建Excel工作簿:實例化
Workbook對象,清空默認工作表,為后續(xù)添加新表格做準備。 - 數(shù)據(jù)寫入單元格:Excel 的行列索引從1開始(與Python的0索引不同),因此需要將表格的行、列索引分別+1,確保數(shù)據(jù)寫入正確位置。
- 優(yōu)化表格格式:調(diào)用
AutoFitColumns()方法設置列寬自適應內(nèi)容,提升表格可讀性,最后保存為指定版本的Excel文件。
完整代碼示例(含詳細注釋)
from spire.pdf import *
from spire.xls import *
# 1. 加載PDF文檔
pdf_doc = PdfDocument()
pdf_doc.LoadFromFile("表格.pdf")
# 2. 創(chuàng)建Excel工作簿并清空默認工作表
excel_workbook = Workbook()
excel_workbook.Worksheets.Clear()
# 3. 初始化表格提取器
table_extractor = PdfTableExtractor(pdf_doc)
# 4. 工作表編號,用于命名新工作表
sheet_index = 1
# 5. 遍歷PDF的每一頁
for page_idx in range(pdf_doc.Pages.Count):
tables = table_extractor.ExtractTable(page_idx)
if tables is not None and len(tables) > 0:
# 遍歷當前頁面的每個表格
for table in tables:
# 創(chuàng)建新工作表,命名為“sheet+編號”
worksheet = excel_workbook.Worksheets.Add(f"sheet{sheet_index}")
row_num = table.GetRowCount()
col_num = table.GetColumnCount()
# 遍歷表格單元格
for i in range(row_num):
for j in range(col_num):
cell_text = table.GetText(i, j)
# Excel索引從1開始,需將i和j分別+1
worksheet.Range[i + 1, j + 1].Value = cell_text
# 設置列寬自適應內(nèi)容,優(yōu)化顯示效果
worksheet.AllocatedRange.AutoFitColumns()
# 工作表編號遞增
sheet_index += 1
# 6. 保存Excel文件,指定保存路徑和Excel版本
excel_workbook.SaveToFile("導出PDF表格到Excel.xlsx", ExcelVersion.Version2016)
# 7. 釋放資源
pdf_doc.Close()
excel_workbook.Dispose()
四、關鍵注意事項
文件路徑問題:若運行代碼時提示“文件不存在”,請檢查 PDF 文件路徑是否正確,建議使用絕對路徑(如 C:/data/表格.pdf)避免路徑錯誤。
中文亂碼處理:寫入 TXT 文件時,務必指定 encoding="utf-8";導出 Excel 文件時,Spire.XLS for Python 默認支持中文,無需額外配置。
資源釋放:使用 Close() 和 Dispose() 方法釋放 PDF 和 Excel 對象,避免長時間運行導致內(nèi)存泄漏。
五、總結(jié)
基于Spire系列庫,能夠快速實現(xiàn) PDF 表格數(shù)據(jù)的提取與格式轉(zhuǎn)換,相比傳統(tǒng)的手動操作,效率提升數(shù)十倍。該方案適用于各類場景,如批量提取財務報表、科研數(shù)據(jù)、政務文件中的 PDF 表格,為數(shù)據(jù)自動化處理提供了可靠的技術(shù)支撐。
到此這篇關于Python提取PDF表格數(shù)據(jù)并導出為TXT、Excel 格式的文章就介紹到這了,更多相關Python提取PDF表格數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 使用Python將Word文檔導出為PDF格式并從Word文檔中提取數(shù)據(jù)
- Python利用pdfplumber提取PDF文檔中的表格數(shù)據(jù)并導出
- Python利用pdfplumber庫提取pdf中表格數(shù)據(jù)
- 如何利用Python提取pdf中的表格數(shù)據(jù)(附實戰(zhàn)案例)
- python用pdfplumber提取pdf表格數(shù)據(jù)并保存到excel文件中
- python?pdfplumber庫批量提取pdf表格數(shù)據(jù)轉(zhuǎn)換為excel
- python從PDF中提取數(shù)據(jù)的示例
- Python 用三行代碼提取PDF表格數(shù)據(jù)
相關文章
詳解python的sorted函數(shù)對字典按key排序和按value排序
這篇文章主要介紹了詳解python的sorted函數(shù)對字典按key排序和按value排序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
手把手教你快速安裝gpu版本的pytorch(詳細圖文教程)
在Windows?10上安裝PyTorch時,通常默認安裝的是CPU版本,且下載速度較慢,本文提供了一個詳細的安裝指南,包括如何檢查CUDA版本、選擇合適的PyTorch、torchvision和torchaudio版本,并通過pip而非conda進行安裝,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-09-09
Python使用eval函數(shù)執(zhí)行動態(tài)標表達式過程詳解
這篇文章主要介紹了Python使用eval函數(shù)執(zhí)行動態(tài)標表達式過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10
Python編程實現(xiàn)tail-n查看日志文件的方法
這篇文章主要介紹了Python編程實現(xiàn)tail-n查看日志文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
Python編寫繪圖系統(tǒng)之從文本文件導入數(shù)據(jù)并繪圖
這篇文章主要為大家詳細介紹了Python如何編寫一個繪圖系統(tǒng),可以實現(xiàn)從文本文件導入數(shù)據(jù)并繪圖,文中的示例代碼講解詳細,感興趣的可以了解一下2023-08-08

