您好,登錄后才能下訂單哦!
本文實(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)制讀模式打開 #用文件對象來創(chuàng)建一個pdf文檔分析器 praser = PDFParser(file) # 創(chuàng)建一個PDF文檔 doc = PDFDocument() # 連接分析器 與文檔對象 praser.set_document(doc) doc.set_parser(praser) # 提供初始化密碼 # 如果沒有密碼 就創(chuàng)建一個空的字符串 doc.initialize() # 檢測文檔是否提供txt轉(zhuǎn)換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創(chuàng)建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創(chuàng)建一個PDF設(shè)備對象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個PDF解釋器對象 interpreter = PDFPageInterpreter(rsrcmgr, device) pdfStr = '' # 循環(huán)遍歷列表,每次處理一個page的內(nèi)容 for page in doc.get_pages(): # doc.get_pages() 獲取page列表 interpreter.process_page(page) # 接受該頁面的LTPage對象 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'總共耗時:' + 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)制讀模式打開 #用文件對象來創(chuàng)建一個pdf文檔分析器 praser = PDFParser(file) # 創(chuàng)建一個PDF文檔 doc = PDFDocument(praser) # 檢測文檔是否提供txt轉(zhuǎn)換,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed # 創(chuàng)建PDf 資源管理器 來管理共享資源 rsrcmgr = PDFResourceManager() # 創(chuàng)建一個PDF設(shè)備對象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個PDF解釋器對象 interpreter = PDFPageInterpreter(rsrcmgr, device) pdfStr = '' # 循環(huán)遍歷列表,每次處理一個page的內(nèi)容 for page in PDFPage.create_pages(doc): # doc.get_pages() 獲取page列表 interpreter.process_page(page) # 接受該頁面的LTPage對象 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'總共耗時:' + 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)典教程》
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。