Python-pdfplumber讀取PDF內容

文章目錄

  • 前言
  • 一、pdfplumber模塊
    • 1.1 pdfplumber的特點
    • 1.2 pdfplumber.PDF類
    • 1.3pdfplumber.Page類
  • 二 pdfplumber的使用
    • 2.1 加載PDF
    • 2.2 pdfplumber.PDF 類
    • 2.3 pdfplumber.Page 類
    • 2.4 讀取PDF
    • 2.5 讀取PDF文檔信息
    • 2.6 查看總頁數
    • 2.7 查看總頁數讀取第一頁的寬度,頁高等信息
    • 2.8 讀取文本
    • 2.9 讀取表格
    • 3.1 pdfplumber提取表格數據
    • 示例
      • 讀取文字
      • 讀取表格

前言

PDF是一種編寫文檔格式,便于跨操作系統傳播文檔。Python的開源庫 pdfplumber,可以較為方便地獲取pdf的各種信息,包含pdf的基本信息(作者、創建時間、修改時間…)及表格、文本、圖片等信息,基本可以滿足較為簡單的格式轉換功能。

一、pdfplumber模塊

1.1 pdfplumber的特點

  • 1、可以輕松訪問有關每個PDF對象的詳細信息。
  • 2、可以提取文本和表格的更高級別,可以自定義的方法。
  • 3、支持緊密集成的可視化調試。
  • 4、有通過裁剪框過濾對象等實用功能。

pdfplumber中有兩個基礎類,PDF和Page。PDF用來處理整個文檔,Page用來處理整個頁面。

1.2 pdfplumber.PDF類

  • .metadata: 獲取pdf基礎信息,返回字典
  • pages 一個包含pdfplumber.Page實例的列表,每一個實例代表pdf每一頁的信息。

1.3pdfplumber.Page類

pdfplumber核心功能,對PDF的大部分操作都是基于這個類,包括提取文本、表格、尺寸等。

二 pdfplumber的使用

2.1 加載PDF

調用pdfplumber.open(x)加載PDF, 其中x可以有以下幾種格式:a、PDF文件路徑。b、文件對象, 以字節流形式加載。c、類文件對象, 以字節流形式加載。

讀取 PDF代碼:pdfplumber.open("路徑/文件名.pdf",password="test",laparams={"line_overlap":0.7})
解讀:
passworf:加載受密碼保護的PDF要傳遞password關鍵字參數。
laparams:將布局分析參數設置為pdfminer.six的布局引擎,傳遞laparams關鍵字參數。

2.2 pdfplumber.PDF 類

pdfplumber.PDF 類代表一個PDF文件,主要有兩個屬性。

屬性說明
.metadata元數據鍵值對字典,摘自PDF的“信息”。通常包括“CreationDate"(創建日期)、“ModDate"(修改日期)、Producer"(創建者)等。
.pages包含pdfplumber . Page(頁實例)的列表。

2.3 pdfplumber.Page 類

pdfplumber.Page是pdfplumber核心,大部分的操作都是圍繞此類進行。

屬性
.page_number頁碼
.width頁面寬
.height頁面長
.objects/ .chars /.lines /. rects /. curves / . images屬性中的每一個都是一個列表,每個列表都是嵌入在頁面上的每個此類對象包含一個字典。

2.4 讀取PDF

import pdfplumber
import pandas as pdwith pdfplumber.open("ag-energy-round-up-2017-02-24.pdf") as pdf:

2.5 讀取PDF文檔信息

with pdfplumber.open("ag-energy-round-up-2017-02-24.pdf") as pdf:print(pdf.metadata)

結果

{‘Title’: ‘National Ag Energy’, ‘Author’: ‘LGMN, Des Moines, IA’, ‘Keywords’: ‘National Ag Energy ethanol biodiesel bioenergy’, ‘CreationDate’: “D:20170224133144-06’00’”, ‘ModDate’: “D:20170224133144-06’00’”, ‘Producer’: ‘Microsoft? Excel? 2013’, ‘Creator’: ‘Microsoft? Excel? 2013’}

2.6 查看總頁數

len(pdf.pages)

2.7 查看總頁數讀取第一頁的寬度,頁高等信息

first_page = pdf.pages[0]
# 查看頁碼
print('頁碼:', first_page.page_number)# 查看頁寬print('頁寬:', first_page.width)
# 查看頁高
print('頁高:', first_page.height)

2.8 讀取文本

with pdfplumber.open("繼(吊巖坪)110-2018-05(都吊東線2區).pdf") as pdf:# 第一頁pdfplumber.Page實例first_page = pdf.pages[0]text = first_page.extract_text()print(text)

2.9 讀取表格

import pdfplumber
import pandas as pdwith pdfplumber.open("繼(吊巖坪)110-2018-05(都吊東線2區).pdf") as pdf:page_third = pdf.pages[0]table_1 = page_third.extract_table()#table_df = pd.DataFrame(table_1[1:], columns=table_1[0])print(table_1)

##三 、示例

3.1 pdfplumber提取表格數據

提取表格數據主要用到extract_tables()和extract_table()兩種方法,這兩種提取方式各有不同。
extract_tables()方法——輸出文檔所有表格,返回一個嵌套列表。

with pdfplumber.open(r'繼(吊巖坪)110-2018-05(都吊東線2區).pdf') as pdf_info:  # 打開pdfpage_one = pdf_info.pages[0]page_one_table = page_one.extract_tables()  # 獲取pdf第一頁的所有表格數據for row in page_one_table:print('第一頁的表格數據:', row)

extact_table()方法——不會返回文檔的所有表格,僅返回行數最多的表格數據。如存在多個行數相等的表格,則默認輸出頂部表格數據。表格的每一行都為一個單獨的列表,列表中的元素即為原表格的各個單元格的數據。

示例

# 提取pdf表格數據并保存到excel中
import pdfplumber
from openpyxl import Workbookclass PDF(object):def __init__(self, file_path):self.pdf_path = file_path# 讀取pdftry:self.pdf_info = pdfplumber.open(self.pdf_path)print('讀取文件完成!')except Exception as e:print('讀取文件失敗:', e)# 打印pdf的基本信息、返回字典,作者、創建時間、修改時間/總頁數def get_pdf(self):pdf_info = self.pdf_info.metadatapdf_page = len(self.pdf_info.pages)print('pdf共%s頁' % pdf_page)print("pdf文件基本信息:\n", pdf_info)self.close_pdf()# 提取表格數據,并保存到excel中def get_table(self):wb = Workbook()  # 實例化一個工作簿對象ws = wb.active  # 獲取第一個sheetcon = 0try:# 獲取每一頁的表格中的文字,返回table、row、cell格式:[[[row1],[row2]]]for page in self.pdf_info.pages:for table in page.extract_tables():for row in table:# 對每個單元格的字符進行簡單清洗處理row_list = [cell.replace('\n', ' ') if cell else '' for cell in row]ws.append(row_list)  # 寫入數據con += 1print('---------------分割線,第%s頁---------------' % con)except Exception as e:print('報錯:', e)finally:wb.save('\\'.join(self.pdf_path.split('\\')[:-1]) + '\pdf_excel.xlsx')print('寫入完成!')self.close_pdf()# 關閉文件def close_pdf(self):self.pdf_info.close()if __name__ == "__main__":file_path = input('請輸入pdf文件路徑:')pdf_info = PDF(file_path)pdf_info.get_pdf() # 打印pdf基礎信息# 提取pdf表格數據并保存到excel中,文件保存到跟pdf同一文件路徑下pdf_info.get_table()
import pdfplumber
text_path = r"D:\Project\MyData\Study\GUI\6_GUI編程(第三部分)\第十一章GUI圖形用戶界面編程.pdf"with pdfplumber.open(text_path) as pdf:print(pdf.pages)#獲取pdf文檔所有的頁,類型是dicttotal_pages = len(pdf.pages)print("total_pages: ",total_pages)page = pdf.pages[0]  #獲取第一頁print(type(page))  #<class 'pdfplumber.page.Page'># print(page.extract_text())  #獲取第一頁的內容#fitz讀取pdf全文content=""for i in range(0,len(pdf.pages)):# page=content += pdf.pages[i].extract_text()# print(page.extract_text())# print(page.extract_tables())# print(content)

讀取文字

import pdfplumber
import pandas as pdwith pdfplumber.open("E:\\600aaa_2.pdf") as pdf:page_count = len(pdf.pages)print(page_count)  # 得到頁數for page in pdf.pages:print('---------- 第[%d]頁 ----------' % page.page_number)# 獲取當前頁面的全部文本信息,包括表格中的文字print(page.extract_text())

讀取表格

import pdfplumber
import pandas as pd
import rewith pdfplumber.open("E:\\600aaa_1.pdf") as pdf:page_count = len(pdf.pages)print(page_count)  # 得到頁數for page in pdf.pages:print('---------- 第[%d]頁 ----------' % page.page_number)for pdf_table in page.extract_tables(table_settings={"vertical_strategy": "text","horizontal_strategy": "lines","intersection_tolerance":20}): # 邊緣相交合并單元格大小# print(pdf_table)for row in pdf_table:# 去掉回車換行print([re.sub('\s+', '', cell) if cell is not None else None for cell in row])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697266.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

263集成客服系統:提升電商平臺用戶體驗

{連接&#xff1a;無縫整合客服渠道} 在電子商務領域&#xff0c;客服是保持客戶滿意度和忠誠度的關鍵因素。263集成客服系統允許電商平臺無縫連接到各種客服通道&#xff0c;包括在線聊天、電子郵件和社交媒體等。這種無代碼開發方式不僅消除了傳統API開發的復雜性&#xff…

使用Java調用Cplex求解帶時間窗的車輛路徑問題

使用Java調用Cplex求解VRPTW問題 一、帶時間窗車輛路徑優化問題&#xff08;Vehicle Routing Problem with Time Window&#xff0c;VRPTW&#xff09;1.1 問題描述1.2 模型構建 二、使用Java調用Cplex求解VRPTW問題2.1 完整代碼2.2 求解結果 三、求解過程中踩的坑 一、帶時間窗…

DevOps:實現軟件開發與運維的協同革命

DevOps作為一種新型的軟件開發和運維模式&#xff0c;在當今信息技術領域引起了廣泛關注和應用。本文通過對DevOps的定義、原則、核心實踐以及優勢等方面進行探討&#xff0c;旨在深入剖析DevOps對軟件開發與運維的革命性影響&#xff0c;并從實踐角度探討其在現代軟件開發中的…

VsCode編譯wxWidgets的HelloWorld

wxWidgets 環境搭建 在wxWidgets 官網下載頁面點擊Download Windows Binaries選擇TDM-GCC 10.3和MinGW-w64 8.1下的頭文件和開發包進行下載。這兒我們會用兩種 gcc 編譯器進行對比&#xff0c;所以下載 2 個種編譯器對應的庫文件。正常只需根據自己安裝的編譯器下載對應的 1 種…

[每周一更]-(第88期):Nginx 之 proxy_pass使用詳解

proxy_pass 指令用于指定后端服務器的地址&#xff0c;可以采用以下不同的格式&#xff1a; 直接指定地址和端口&#xff1a; location / {proxy_pass http://backend_server:8080; }這將請求代理到 http://backend_server:8080。 使用變量&#xff1a; location / {set $ba…

petalinux_zynq7 驅動DAC以及ADC模塊之五:nodejs+vue3實現web網頁波形顯示

前文&#xff1a; petalinux_zynq7 C語言驅動DAC以及ADC模塊之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C語言驅動DAC以及ADC模塊之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

flutter開發實戰-手勢Gesture與ListView滾動競技場的可滑動關閉組件

flutter開發實戰-手勢Gesture與ListView滾動競技場的可滑動關閉組件 最近看到了一個插件&#xff0c;實現一個可滑動關閉組件。滑動關閉組件即手指向下滑動&#xff0c;組件隨手指移動&#xff0c;當移動一定位置時候&#xff0c;手指抬起后組件滑出屏幕。 一、GestureDetect…

大保司保費貴,是否物有所值?

《大保司保費貴&#xff0c;是否物有所值》 這是羅師兄的原創文章 預計8-9分鐘讀完 作者&#xff1a;羅師兄 微信號&#xff1a;luoyun515 當我們想要買一份重疾險、儲蓄險等長期險時&#xff0c; 我們會發現&#xff0c;同樣的保障責任和保額&#xff0c; 不同保險公司的…

基于AdaBoost算法的情感分析研究-微博情感分析-文本分類

基于AdaBoost算法的情感分析研究 摘 要 隨著互聯網的快速發展&#xff0c;各類社交媒體平臺如微信、QQ等也與日俱增&#xff0c;而微博更是集成了傳統網站、論壇、博客等的優點&#xff0c;并加上了人與人之間的互動性、關系親密程度等多種智能算法&#xff0c;并以簡練的形式…

python安裝與配置2024最新版

對python不熟悉的可以去看看這篇文章python介紹 pytho安裝 來到Python官網&#xff1a;https://www.python.org/ 然后 選著download列表下的windows , 然后加進入python各個版本的下載界面 可以看到截止2024年2月22日,最新版是3.12.2 但是我們一般下載穩定版 如下,點擊連接進…

設計模式學習筆記 - 面向對象 - 5.接口和抽象類的區別

簡述 在面向對象編程中&#xff0c;抽象類和接口是常被用到的語法概念&#xff0c;是面向對象四大特性&#xff0c;以及很多設計模式、設計思想、設計原則實現的基礎。它們之間的區別是什么&#xff1f;什么時候用接口&#xff1f;什么時候用抽象類&#xff1f;抽象類和接口存…

解決兩個MySQL5.7報錯

目錄 1.啟動不了MySQL&#xff0c;報錯缺少MSVCR120.dll去官網下載vcredist_x64.exe運行安裝進入管理員CMD 2.本地計算機 上的 mysql 服務啟動后停止。某些服務在未由其他服務或程序使用時將自動停止&#xff0c;Fatal error: Can‘t open and lock privilege tables: Table ‘…

wpf menu 菜單 快捷鍵

界面快捷鍵資源 CtrlF F3可加入其它&#xff0c;自行定義 Page可改為Windows xaml文件 <Style TargetType"{x:Type DataGrid}"> <Setter Property"ContextMenu"> <Setter.Value> <ContextMenu St…

實習日志28

1.醫院賬套系統換新&#xff0c;卡片數據轉移 1.1.修改舊導出的Excel 1.2.嘗試導入新系統 1.3.修改導入數據再次導入即可 這個系統做的限制條件比較多&#xff0c;代碼健壯性不錯。 先在Excel表格里改好批量的&#xff0c;再導入檢查&#xff0c;改一些細節的比較快捷。 2.…

套接字(Sockets)編程——逆向分析向

套接字&#xff08;Sockets&#xff09;編程 套接字&#xff08;Sockets&#xff09;編程是一種網絡編程技術&#xff0c;用于在不同計算機之間或同一臺計算機上的不同進程之間進行通信。在套接字編程中&#xff0c;我們創建套接字&#xff0c;這是一個支持網絡請求和響應的端…

PHP安全

PHP安全 推薦鏈接PHP版本號隱藏 推薦鏈接 鏈接目錄 PHP版本號隱藏 PHP 版本信息泄露 系統數據包 X-Powered-By 字段泄露了 PHP 具體版本信息 //找到php.ini文件 //要修改的位置&#xff0c;把expose_phpOn 改為 expose_phpOff //service php-fpm restart #apache服務器可使用…

ChatGPT回答模式

你發現了嗎&#xff0c;ChatGPT的回答總是遵循這些類型方式。 目錄 1.解釋模式 2.類比模式 3.列舉模式 4.限制模式 5.轉換模式 6.增改模式 7.對比模式 8.翻譯模式 9.模擬模式 10.推理模式 1.解釋模式 ChatGPT 在回答問題或提供信息時&#xff0c;不僅僅給出…

【Linux取經路】文件系統之緩沖區

文章目錄 一、先看現象二、用戶緩沖區的引入三、用戶緩沖區的刷新策略四、為什么要有用戶緩沖區五、現象解釋六、結語 一、先看現象 #include <stdio.h> #include <string.h> #include <unistd.h>int main() {const char* fstr "Hello fwrite\n"…

HW面試常見知識點(新手認識版)

shiro漏洞原理 shiro漏洞原理是攻擊者利用shiro的默認密鑰偽造cookie&#xff0c;觸發JAVA反序列化執行命令或者寫shell。 shiro工具原理 跑默認key shiro550和721的區別 721是需要有效的登錄才可以 550不用登錄就可以直接跑key log4j原理 log4j是一款通用日志記錄工具&#xf…

【思揚贈書 | 第3期】由面試題“Redis是否為單線程”引發的思考

?? 寫在前面參與規則&#xff01;&#xff01;&#xff01; ?參與方式&#xff1a;關注博主、點贊、收藏、評論&#xff0c;任意評論&#xff08;每人最多評論三次&#xff09; ??本次送書1~4本【取決于閱讀量&#xff0c;閱讀量越多&#xff0c;送的越多】 很多人都遇到…