日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python解析并读取PDF文件:函数总结

發布時間:2025/3/21 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python解析并读取PDF文件:函数总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.PyPDF2

2.?pdfminer & pdfminer3k

3. pdfplumber

4.?Camelot


雖然PDF文件對文本布局非常好,容易打印并閱讀,但軟件要將它們解析為純文本并不容易,Python目前解析PDF的擴展包有很多,本文將分別介紹PyPDF2、pdfplumber、pdfminer3k以及Camelot(若發現還有其他函數,繼續補充),并分析優缺點,告訴你哪個是好用的PDF解析工具。

1.PyPDF2

PyPDF2 沒有辦法從 PDF 文檔中提取圖像、圖表或其他媒體,但它可以提取文 本,并將文本返回為 Python 字符串

缺點:PyPDF2從PDF提取文本時可能會出錯,甚至根本打不開某些PDF文件。

基本實現代碼如下:

import PyPDF2# 使用open的‘rb’方法打開pdf文件,使用二進制模式 mypdf = open('pdfexample.pdf',mode='rb')# 調用PdfFileReader函數 pdf_document = PyPDF2.PdfFileReader(mypdf)# 使用PdfFileReader對象的變量,獲取各個信息,如numPages屬性獲取PDF文檔的頁數 pdf_document.numPages # 調用PdfFileReader對象的getPage()方法,傳入頁碼,取得Page對象:輸出PDF文檔的第一頁內容 first_page = pdf_document.getPage(0)# 調用Page對象的extractText()方法,返回該頁文本的字符串 text = first_page.extractText())

2.?pdfminer & pdfminer3k

PDFMiner是一個從PDF文檔中提取信息的工具。與其他pdf相關的工具不同,它完全專注于獲取和分析文本數據。PDFMiner允許獲取頁面中文本的確切位置,以及其他信息,比如字體或行。它包括一個PDF轉換器,可以將PDF文件轉換成其他文本格式(如HTML)。它有一個可擴展的PDF解析器,可以用于其他目的而不是文本分析。

pdfminer3k 是 pdfminer 的 python3 版本,主要用于讀取 pdf 中的文本,下面是pdfminer 解析PDF文檔的流向圖。

? ? ? ? ? ? ? ? ??

pdfminer方法解析PDF可以很好的提取文本內容,但是對于表格數據,能提取出文字,但是沒有格式,會很不友好。因此你如果只需要提取文本內容的話,可以使用pdfminer擴展包,這個包也能很好的支持中文。

參考:https://www.cnblogs.com/wj-1314/p/9429816.html

3. pdfplumber

Pdfplumber是一個可以處理pdf格式信息的庫,可以很好地解析PDF的文本和表格內容??梢圆檎谊P于每個文本字符、矩陣、和行的詳細信息,也可以對表格進行提取并進行可視化調試,并且對中文有很好的支持,十分推薦使用該方法。

參考:https://blog.csdn.net/blmoistawinde/article/details/82051915

pdfplumber.pdf中包含了.metadata和.pages兩個屬性:

  • .metadata是一個包含pdf信息的字典。
  • .pages是一個包含頁面信息的列表。

每個pdfplumber.page的類中包含了幾個主要的屬性:

  • .page_number 頁碼
  • .width 頁面寬度
  • .height 頁面高度
  • .objects/.chars/.lines/.rects 這些屬性中每一個都是一個列表,每個列表都包含一個字典,每個字典用于說明頁面中的對象信息, 包括直線,字符, 方格等位置信息。

一些常用的方法:

  • .extract_text() 用來提頁面中的文本,將頁面的所有字符對象整理為的那個字符串
  • .extract_words() 返回的是所有的單詞及其相關信息
  • .extract_tables() 提取頁面的表格
  • .to_image() 用于可視化調試時,返回PageImage類的一個實例
    ?

1. 解析文本內容

pdfplumber中的extract_text()函數是可以直接識別PDF中的文本內容:

import pdfplumber import pandas as pdwith pdfplumber.open(path) as pdf: content = ''for i in range(len(pdf.pages)):# 讀取PDF文檔第i+1頁page = pdf.pages[i] # page.extract_text()函數即讀取文本內容,下面這步是去掉文檔最下面的頁碼page_content = '\n'.join(page.extract_text().split('\n')[:-1])content = content + page_content# 提取以上解析結果中,“地方法規”和“2.其他有關資料”之間的內容 result = content.split('地方法規列舉如下:')[1].split('2.其他有關資料')[0]

2. 解析表格內容

pdfplumber中的extract_tables()函數是可以直接識別PDF中的表格的,使用extract_tables函數得到的是Table一個嵌套的List類型,轉化成DataFrame會更方便查看和分析。

import pdfplumber import pandas as pdwith pdfplumber.open(path) as pdf: first_page = pdf.pages[0] tables = first_page.extract_tables()for table in tables df = pd.DataFrame(table) # 第一列當成表頭: df = pd.DataFrame(table[1:],columns=table[0])

4.?Camelot

Camelot讀取PDF文件中的表格數據很好用,并且能夠很好的支持中文,但是Camelot有很多局限性:

  • 首先,使用stream時,表格無法被自動偵測到,stream把整個頁面當成一個table。
  • 其次,camelot只用使用基于文本的PDF文件而不能使用掃描文檔。
import camelot import pandas as pdtables = camelot.read_pdf(filepath=path,pages='1',flavor='stream') df = pd.DataFrame(tables[0].data)

綜上所述,建議使用pdfplumber擴展包來解析PDF文檔的文本和表格,如果只解析文本內容,也可以使用pdfminer ,而解析英文文檔內容,可以使用PyPDF2。
?

?

?

?

總結

以上是生活随笔為你收集整理的python解析并读取PDF文件:函数总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。