欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入探索Python如何利用pdfplumber從PDF中提取信息到實(shí)際項(xiàng)目應(yīng)用

 更新時(shí)間:2025年11月13日 09:22:03   作者:一鍵難忘  
在數(shù)據(jù)處理和信息提取的過(guò)程中,PDF文檔是一種常見(jiàn)的格式,本文將介紹如何使用Python庫(kù)中的pdfplumber庫(kù)來(lái)讀取PDF文檔,感興趣的小伙伴可以了解下

在數(shù)據(jù)處理和信息提取的過(guò)程中,PDF文檔是一種常見(jiàn)的格式。然而,要從PDF中提取信息并進(jìn)行進(jìn)一步的分析,我們需要使用適當(dāng)?shù)墓ぞ?。本文將介紹如何使用Python庫(kù)中的pdfplumber庫(kù)來(lái)讀取PDF文檔,并通過(guò)實(shí)際代碼示例演示如何將提取的信息寫(xiě)入Excel文件。

1. pdfplumber簡(jiǎn)介

pdfplumber是一個(gè)用于處理PDF文件的Python庫(kù),它基于PDFMiner、pyPDF2和其他庫(kù)構(gòu)建而成。它提供了簡(jiǎn)單而強(qiáng)大的接口,使得從PDF文檔中提取文本、表格和其他元素變得更加容易。

2. 安裝pdfplumber

首先,確保你已經(jīng)安裝了Python。然后使用以下命令安裝pdfplumber:

pip install pdfplumber

3. 使用pdfplumber讀取PDF文檔

讓我們通過(guò)以下步驟演示如何使用pdfplumber讀取PDF文檔。

import pdfplumber

# 讀取PDF文檔
with pdfplumber.open('example.pdf') as pdf:
    # 獲取文檔的總頁(yè)數(shù)
    total_pages = len(pdf.pages)

    # 遍歷每一頁(yè)
    for page_number in range(total_pages):
        # 獲取當(dāng)前頁(yè)
        page = pdf.pages[page_number]

        # 提取文本內(nèi)容
        text = page.extract_text()

        # 打印文本內(nèi)容
        print(f"Page {page_number + 1}:\n{text}")

以上代碼演示了如何打開(kāi)PDF文檔,獲取總頁(yè)數(shù),并遍歷每一頁(yè)提取文本內(nèi)容。接下來(lái),我們將演示如何提取表格數(shù)據(jù),并將其寫(xiě)入Excel文件。

4. 將提取的表格數(shù)據(jù)寫(xiě)入Excel

import pdfplumber
import pandas as pd

# 讀取PDF文檔
with pdfplumber.open('example.pdf') as pdf:
    # 獲取文檔的總頁(yè)數(shù)
    total_pages = len(pdf.pages)

    # 創(chuàng)建一個(gè)空的DataFrame來(lái)存儲(chǔ)表格數(shù)據(jù)
    df = pd.DataFrame()

    # 遍歷每一頁(yè)
    for page_number in range(total_pages):
        # 獲取當(dāng)前頁(yè)
        page = pdf.pages[page_number]

        # 提取表格數(shù)據(jù)
        table = page.extract_table()

        # 將表格數(shù)據(jù)轉(zhuǎn)換為DataFrame
        df_page = pd.DataFrame(table)

        # 將當(dāng)前頁(yè)的數(shù)據(jù)添加到整體DataFrame中
        df = df.append(df_page, ignore_index=True)

    # 將DataFrame寫(xiě)入Excel文件
    df.to_excel('output.xlsx', index=False)

以上代碼演示了如何使用pdfplumber提取PDF文檔中的表格數(shù)據(jù),并將其存儲(chǔ)到一個(gè)Pandas DataFrame中。最后,將DataFrame寫(xiě)入Excel文件。這樣,你就可以輕松地將PDF中的表格數(shù)據(jù)轉(zhuǎn)移到Excel進(jìn)行進(jìn)一步分析。

5. 代碼解析

讓我們深入了解上述代碼的關(guān)鍵部分:

導(dǎo)入pdfplumber和pandas庫(kù):

import pdfplumber
import pandas as pd

在代碼的開(kāi)頭,我們導(dǎo)入了pdfplumber和pandas庫(kù)。pdfplumber用于處理PDF文件,而pandas用于處理表格數(shù)據(jù)。

打開(kāi)PDF文檔并遍歷每一頁(yè):

with pdfplumber.open('example.pdf') as pdf:
    total_pages = len(pdf.pages)
    df = pd.DataFrame()
    for page_number in range(total_pages):
        page = pdf.pages[page_number]
        # ...

使用pdfplumber.open打開(kāi)PDF文檔,并通過(guò)pdf.pages獲取文檔中的所有頁(yè)。然后,我們創(chuàng)建一個(gè)空的DataFrame df 用于存儲(chǔ)表格數(shù)據(jù),并使用for循環(huán)遍歷每一頁(yè)。

提取表格數(shù)據(jù)和將其轉(zhuǎn)換為DataFrame:

table = page.extract_table()
df_page = pd.DataFrame(table)

使用page.extract_table()方法從當(dāng)前頁(yè)提取表格數(shù)據(jù),并將其轉(zhuǎn)換為Pandas DataFrame。

將當(dāng)前頁(yè)的數(shù)據(jù)添加到整體DataFrame中:

df = df.append(df_page, ignore_index=True)

使用df.append方法將當(dāng)前頁(yè)的數(shù)據(jù)添加到整體DataFrame中。ignore_index=True確保每頁(yè)的數(shù)據(jù)都具有唯一的索引。

將DataFrame寫(xiě)入Excel文件:

df.to_excel('output.xlsx', index=False)

使用df.to_excel方法將整體DataFrame寫(xiě)入Excel文件,index=False表示不將DataFrame的索引寫(xiě)入Excel文件中。

6. 進(jìn)階應(yīng)用與注意事項(xiàng)

6.1 進(jìn)階應(yīng)用

處理復(fù)雜表格結(jié)構(gòu): 對(duì)于包含合并單元格、嵌套表格等復(fù)雜結(jié)構(gòu)的PDF表格,pdfplumber提供了一些高級(jí)的方法和屬性,如cells、merge_strategy等,使我們能夠更靈活地處理這些情況。

提取非文本元素: pdfplumber不僅可以提取文本數(shù)據(jù),還可以獲取圖片、矩形、線(xiàn)條等元素。這為處理包含圖像或其他非文本內(nèi)容的PDF提供了可能性。

6.2 注意事項(xiàng)

  • PDF文檔質(zhì)量: pdfplumber的性能受到PDF文檔質(zhì)量的影響。在處理低質(zhì)量或掃描的文檔時(shí),提取數(shù)據(jù)可能會(huì)變得更加復(fù)雜,需要更多的處理和清理。
  • 編碼和字體: 在處理PDF文檔時(shí),特別是處理非英語(yǔ)文本時(shí),可能會(huì)遇到編碼和字體的問(wèn)題。確保系統(tǒng)中安裝了適當(dāng)?shù)淖煮w,并根據(jù)需要設(shè)置文本編碼。
  • 文檔結(jié)構(gòu)變化: pdfplumber依賴(lài)于PDF的結(jié)構(gòu),如果文檔的結(jié)構(gòu)發(fā)生變化,可能需要調(diào)整代碼以適應(yīng)新的結(jié)構(gòu)。

7. 拓展閱讀與學(xué)習(xí)資源

為了幫助讀者更深入地學(xué)習(xí)和應(yīng)用pdfplumber以及相關(guān)技術(shù),以下是一些拓展閱讀和學(xué)習(xí)資源:

  • PDFMiner官方文檔: pdfplumber基于PDFMiner,因此熟悉PDFMiner庫(kù)的使用也是有益的。PDFMiner的官方文檔提供了對(duì)PDF文檔的更底層訪(fǎng)問(wèn),適合需要更高度自定義的場(chǎng)景。
  • Python編程學(xué)習(xí): 如果你是Python新手,建議深入學(xué)習(xí)Python編程語(yǔ)言的基礎(chǔ)知識(shí)。你可以通過(guò)在線(xiàn)教程、課程或經(jīng)典教材來(lái)提高你的Python編程技能。

8. 探索其他PDF處理工具

pdfplumber是眾多用于處理PDF的Python庫(kù)之一。根據(jù)不同需求,你可能還會(huì)對(duì)其他庫(kù)感興趣,如PyMuPDF、PyPDF2等。了解多個(gè)庫(kù)的優(yōu)缺點(diǎn),選擇適合你項(xiàng)目需求的工具。

9. 實(shí)踐項(xiàng)目:從PDF中提取特定信息

為了更好地鞏固對(duì)pdfplumber的理解,讓我們嘗試一個(gè)實(shí)踐項(xiàng)目:從一份包含多個(gè)人員信息的PDF文件中提取姓名、郵箱地址和電話(huà)號(hào)碼,并將其存儲(chǔ)到一個(gè)結(jié)構(gòu)化的數(shù)據(jù)格式中。

import pdfplumber
import re

def extract_information_from_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
        total_pages = len(pdf.pages)

        # 創(chuàng)建一個(gè)空的列表用于存儲(chǔ)信息
        extracted_data = []

        for page_number in range(total_pages):
            page = pdf.pages[page_number]

            # 提取文本內(nèi)容
            text = page.extract_text()

            # 使用正則表達(dá)式提取姓名、郵箱地址和電話(huà)號(hào)碼
            name_match = re.search(r'姓名: (.+)', text)
            email_match = re.search(r'郵箱: (.+)', text)
            phone_match = re.search(r'電話(huà): (.+)', text)

            if name_match and email_match and phone_match:
                name = name_match.group(1)
                email = email_match.group(1)
                phone = phone_match.group(1)

                # 將提取的信息添加到列表中
                extracted_data.append({'姓名': name, '郵箱': email, '電話(huà)': phone})

    return extracted_data

# 指定PDF文件路徑
pdf_file_path = 'person_info.pdf'

# 提取信息并打印
result = extract_information_from_pdf(pdf_file_path)
for entry in result:
    print(entry)

在這個(gè)示例中,我們使用正則表達(dá)式從每一頁(yè)的文本中提取姓名、郵箱地址和電話(huà)號(hào)碼。請(qǐng)注意,實(shí)際的PDF文檔結(jié)構(gòu)可能因具體情況而異,你可能需要根據(jù)文檔的實(shí)際結(jié)構(gòu)進(jìn)行適當(dāng)?shù)恼{(diào)整。

10. 進(jìn)一步學(xué)習(xí)

深入學(xué)習(xí)正則表達(dá)式: 正則表達(dá)式在文本提取中非常有用。深入學(xué)習(xí)正則表達(dá)式的語(yǔ)法和應(yīng)用可以幫助你更高效地處理各種文本模式。

數(shù)據(jù)清洗與預(yù)處理: 在實(shí)際項(xiàng)目中,你可能需要進(jìn)行更復(fù)雜的數(shù)據(jù)清洗和預(yù)處理。學(xué)習(xí)Pandas和其他數(shù)據(jù)處理工具,掌握數(shù)據(jù)清洗技巧將對(duì)你的工作大有裨益。

Web Scraping: 如果你的信息源不僅限于PDF文檔,還包括Web頁(yè)面,學(xué)習(xí)Web Scraping技術(shù)將進(jìn)一步拓展你的信息獲取能力。

11. 最佳實(shí)踐:代碼優(yōu)化和異常處理

在實(shí)際項(xiàng)目中,為了保證代碼的可維護(hù)性和穩(wěn)定性,我們通常需要考慮一些最佳實(shí)踐,包括代碼優(yōu)化和異常處理。

代碼優(yōu)化

使用函數(shù)和模塊: 將代碼組織為函數(shù)和模塊,以提高可讀性和可維護(hù)性。將上述提取信息的代碼封裝成一個(gè)函數(shù),便于復(fù)用和管理。

import pdfplumber
import re

def extract_information_from_text(text):
    name_match = re.search(r'姓名: (.+)', text)
    email_match = re.search(r'郵箱: (.+)', text)
    phone_match = re.search(r'電話(huà): (.+)', text)

    if name_match and email_match and phone_match:
        name = name_match.group(1)
        email = email_match.group(1)
        phone = phone_match.group(1)
        return {'姓名': name, '郵箱': email, '電話(huà)': phone}
    else:
        return None

def extract_information_from_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
        total_pages = len(pdf.pages)
        extracted_data = []

        for page_number in range(total_pages):
            page = pdf.pages[page_number]
            text = page.extract_text()
            
            result = extract_information_from_text(text)
            if result:
                extracted_data.append(result)

    return extracted_data

異常處理

處理異常情況: 在現(xiàn)實(shí)項(xiàng)目中,PDF文檔的結(jié)構(gòu)可能因來(lái)源和版本而異,因此我們需要在代碼中添加適當(dāng)?shù)漠惓L幚韥?lái)處理不同情況。

def extract_information_from_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
        total_pages = len(pdf.pages)
        extracted_data = []

        for page_number in range(total_pages):
            try:
                page = pdf.pages[page_number]
                text = page.extract_text()

                result = extract_information_from_text(text)
                if result:
                    extracted_data.append(result)
            except Exception as e:
                print(f"Error processing page {page_number + 1}: {str(e)}")

    return extracted_data

通過(guò)添加異常處理,我們能夠捕獲并打印錯(cuò)誤信息,同時(shí)繼續(xù)處理其他頁(yè)面,確保程序的魯棒性。

到此這篇關(guān)于深入探索Python如何利用pdfplumber從PDF中提取信息到實(shí)際項(xiàng)目應(yīng)用的文章就介紹到這了,更多相關(guān)Python pdfplumber提取PDF信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete

    numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete

    這篇文章主要介紹了numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python web開(kāi)發(fā)之用Tornado框架制作簡(jiǎn)易表白墻網(wǎng)站

    Python web開(kāi)發(fā)之用Tornado框架制作簡(jiǎn)易表白墻網(wǎng)站

    這篇文章將用Python做Web開(kāi)發(fā)。在Python當(dāng)中,WEB開(kāi)發(fā)框架主要有三個(gè),本文將利用Tornado框架做一個(gè)簡(jiǎn)單的表白墻網(wǎng)站,感興趣的可以了解一下
    2022-02-02
  • Python實(shí)現(xiàn)批量識(shí)別圖片文字并保存到excel中

    Python實(shí)現(xiàn)批量識(shí)別圖片文字并保存到excel中

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量識(shí)別圖片文字并保存到excel中,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not?found錯(cuò)誤解決

    PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not

    這篇文章主要給大家介紹了關(guān)于PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not?found錯(cuò)誤的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 擴(kuò)展Django admin的list_filter()可使用范圍方法

    擴(kuò)展Django admin的list_filter()可使用范圍方法

    今天小編就為大家分享一篇擴(kuò)展Django admin的list_filter()可使用范圍方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • matplotlib基礎(chǔ)繪圖命令之imshow的使用

    matplotlib基礎(chǔ)繪圖命令之imshow的使用

    這篇文章主要介紹了matplotlib基礎(chǔ)繪圖命令之imshow的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python爬蟲(chóng)之Selenium實(shí)現(xiàn)窗口截圖

    Python爬蟲(chóng)之Selenium實(shí)現(xiàn)窗口截圖

    這篇文章主要介紹了Python爬蟲(chóng)之Selenium實(shí)現(xiàn)窗口截圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python3線(xiàn)程池ThreadPoolExecutor處理csv文件數(shù)據(jù)

    python3線(xiàn)程池ThreadPoolExecutor處理csv文件數(shù)據(jù)

    這篇文章主要為大家介紹了python3線(xiàn)程池ThreadPoolExecutor處理csv文件數(shù)據(jù)實(shí)現(xiàn)的實(shí)例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • python 中的列表生成式、生成器表達(dá)式、模塊導(dǎo)入

    python 中的列表生成式、生成器表達(dá)式、模塊導(dǎo)入

    這篇文章主要介紹了python中的列表生成式、生成器表達(dá)式、模塊導(dǎo)入 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • python環(huán)境配置方式(服務(wù)器+本地)

    python環(huán)境配置方式(服務(wù)器+本地)

    這篇文章詳細(xì)介紹了在服務(wù)器上安裝和配置Anaconda3、TensorFlow、PyTorch等深度學(xué)習(xí)環(huán)境的步驟,包括下載、初始化、創(chuàng)建環(huán)境、驗(yàn)證安裝以及解決一些常見(jiàn)問(wèn)題
    2025-01-01

最新評(píng)論