Python解析并讀取PDF文件內(nèi)容的方法
本文實(shí)例講述了Python解析并讀取PDF文件內(nèi)容的方法。分享給大家供大家參考,具體如下:
一、問題描述
利用python,去讀取pdf文本內(nèi)容。
二、效果
三、運(yùn)行環(huán)境
python2.7
四、需要安裝的庫
pip install pdfminer
五、實(shí)現(xiàn)源代碼
代碼1(win64)
# coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import time time1=time.time() import os.path from pdfminer.pdfparser import PDFParser,PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LTTextBoxHorizontal,LAParams from pdfminer.pdfinterp import PDFTextExtractionNotAllowed result=[] class CPdf2TxtManager(): def __init__(self): ''''' Constructor ''' def changePdfToText(self, filePath): file = open(path, 'rb') # 以二進(jìn)制讀模式打開 #用文件對(duì)象來創(chuàng)建一個(gè)pdf文檔分析器 praser = PDFParser(file) # 創(chuàng)建一個(gè)PDF文檔 doc = PDFDocument() # 連接分析器 與文檔對(duì)象 praser.set_document(doc) doc.set_parser(praser) # 提供初始化密碼 # 如果沒有密碼 就創(chuàng)建一個(gè)空的字符串 doc.initialize() # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創(chuàng)建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個(gè)PDF解釋器對(duì)象 interpreter = PDFPageInterpreter(rsrcmgr, device) pdfStr = '' # 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容 for page in doc.get_pages(): # doc.get_pages() 獲取page列表 interpreter.process_page(page) # 接受該頁面的LTPage對(duì)象 layout = device.get_result() for x in layout: if hasattr(x, "get_text"): # print x.get_text() result.append(x.get_text()) fileNames = os.path.splitext(filePath) with open(fileNames[0] + '.txt','wb') as f: results = x.get_text() print(results) f.write(results + '\n') if __name__ == '__main__': ''''' 解析pdf 文本,保存到txt文件中 ''' path = u'C:/data3.pdf' pdf2TxtManager = CPdf2TxtManager() pdf2TxtManager.changePdfToText(path) # print result[0] time2 = time.time() print u'ok,解析pdf結(jié)束!' print u'總共耗時(shí):' + str(time2 - time1) + 's'
代碼2(win32)
# coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import time time1=time.time() import os.path from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFTextExtractionNotAllowed from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage result=[] class CPdf2TxtManager(): def __init__(self): ''''' Constructor ''' def changePdfToText(self, filePath): file = open(path, 'rb') # 以二進(jìn)制讀模式打開 #用文件對(duì)象來創(chuàng)建一個(gè)pdf文檔分析器 praser = PDFParser(file) # 創(chuàng)建一個(gè)PDF文檔 doc = PDFDocument(praser) # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創(chuàng)建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個(gè)PDF解釋器對(duì)象 interpreter = PDFPageInterpreter(rsrcmgr, device) pdfStr = '' # 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容 for page in PDFPage.create_pages(doc): # doc.get_pages() 獲取page列表 interpreter.process_page(page) # 接受該頁面的LTPage對(duì)象 layout = device.get_result() for x in layout: if hasattr(x, "get_text"): # print x.get_text() result.append(x.get_text()) fileNames = os.path.splitext(filePath) with open(fileNames[0] + '.txt','wb') as f: results = x.get_text() print(results) f.write(results + '\n') if __name__ == '__main__': ''''' 解析pdf 文本,保存到txt文件中 ''' path = u'C:/36.pdf' pdf2TxtManager = CPdf2TxtManager() pdf2TxtManager.changePdfToText(path) # print result[0] time2 = time.time() print u'ok,解析pdf結(jié)束!' print u'總共耗時(shí):' + str(time2 - time1) + 's'
更多Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python使用pandas自動(dòng)化合并Excel文件的實(shí)現(xiàn)方法
在數(shù)據(jù)分析和處理工作中,經(jīng)常會(huì)遇到需要合并多個(gè)Excel文件的情況,本文介紹了一種使用Python編程語言中的Pandas庫和Glob模塊來自動(dòng)化合并Excel文件的方法,需要的朋友可以參考下2024-06-06基于Python Numpy的數(shù)組array和矩陣matrix詳解
下面小編就為大家分享一篇基于Python Numpy的數(shù)組array和矩陣matrix詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04numpy中np.dstack()、np.hstack()、np.vstack()用法
numpy里dstack, hstack, vstack, 都有拼接的作用,本文詳細(xì)的介紹了np.dstack()、np.hstack()、np.vstack()用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Python實(shí)現(xiàn)手寫一個(gè)類似django的web框架示例
這篇文章主要介紹了Python實(shí)現(xiàn)手寫一個(gè)類似django的web框架,結(jié)合具體實(shí)例形式分析了Python自定義簡(jiǎn)單控制器、URL路由、視圖模型等功能,實(shí)現(xiàn)類似Django框架的web應(yīng)用相關(guān)操作技巧,需要的朋友可以參考下2018-07-07python3+PyQt5實(shí)現(xiàn)自定義窗口部件Counters
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)自定義窗口部件,Counters自定窗口部件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04使用Django搭建一個(gè)基金模擬交易系統(tǒng)教程
今天小編就為大家分享一篇使用Django搭建一個(gè)基金模擬交易系統(tǒng)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11