最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

在數(shù)據(jù)處理和信息提取的過程中,PDF文檔是一種常見的格式。然而,要從PDF中提取信息并進(jìn)行進(jìn)一步的分析,我們需要使用適當(dāng)?shù)墓ぞ摺1疚膶⒔榻B如何使用Python庫中的pdfplumber庫來讀取PDF文檔,并通過實(shí)際代碼示例演示如何將提取的信息寫入Excel文件。

1. pdfplumber簡介

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

2. 安裝pdfplumber

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

pip install pdfplumber

3. 使用pdfplumber讀取PDF文檔

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

import pdfplumber

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

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

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

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

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

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

import pdfplumber
import pandas as pd

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

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

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

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

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

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

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

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

5. 代碼解析

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

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

import pdfplumber
import pandas as pd

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

打開PDF文檔并遍歷每一頁:

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打開PDF文檔,并通過pdf.pages獲取文檔中的所有頁。然后,我們創(chuàng)建一個(gè)空的DataFrame df 用于存儲表格數(shù)據(jù),并使用for循環(huán)遍歷每一頁。

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

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

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

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

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

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

將DataFrame寫入Excel文件:

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

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

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

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

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

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

6.2 注意事項(xiàng)

  • PDF文檔質(zhì)量: pdfplumber的性能受到PDF文檔質(zhì)量的影響。在處理低質(zhì)量或掃描的文檔時(shí),提取數(shù)據(jù)可能會變得更加復(fù)雜,需要更多的處理和清理。
  • 編碼和字體: 在處理PDF文檔時(shí),特別是處理非英語文本時(shí),可能會遇到編碼和字體的問題。確保系統(tǒng)中安裝了適當(dāng)?shù)淖煮w,并根據(jù)需要設(shè)置文本編碼。
  • 文檔結(jié)構(gòu)變化: pdfplumber依賴于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庫的使用也是有益的。PDFMiner的官方文檔提供了對PDF文檔的更底層訪問,適合需要更高度自定義的場景。
  • Python編程學(xué)習(xí): 如果你是Python新手,建議深入學(xué)習(xí)Python編程語言的基礎(chǔ)知識。你可以通過在線教程、課程或經(jīng)典教材來提高你的Python編程技能。

8. 探索其他PDF處理工具

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

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

為了更好地鞏固對pdfplumber的理解,讓我們嘗試一個(gè)實(shí)踐項(xiàng)目:從一份包含多個(gè)人員信息的PDF文件中提取姓名、郵箱地址和電話號碼,并將其存儲到一個(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è)空的列表用于存儲信息
        extracted_data = []

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

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

            # 使用正則表達(dá)式提取姓名、郵箱地址和電話號碼
            name_match = re.search(r'姓名: (.+)', text)
            email_match = re.search(r'郵箱: (.+)', text)
            phone_match = re.search(r'電話: (.+)', 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, '電話': 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á)式從每一頁的文本中提取姓名、郵箱地址和電話號碼。請注意,實(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īng)用可以幫助你更高效地處理各種文本模式。

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

Web Scraping: 如果你的信息源不僅限于PDF文檔,還包括Web頁面,學(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'電話: (.+)', 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, '電話': 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)可能因來源和版本而異,因此我們需要在代碼中添加適當(dāng)?shù)漠惓L幚韥硖幚聿煌闆r。

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

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

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

相關(guān)文章

  • python打開網(wǎng)頁和暫停實(shí)例

    python打開網(wǎng)頁和暫停實(shí)例

    這篇文章主要介紹了python打開網(wǎng)頁和暫停實(shí)例,涉及webbrowser模塊與os模塊的使用,是非常具有實(shí)用價(jià)值的一個(gè)技巧,需要的朋友可以參考下
    2014-09-09
  • PyInstaller的安裝和使用的詳細(xì)步驟

    PyInstaller的安裝和使用的詳細(xì)步驟

    這篇文章主要介紹了PyInstaller的安裝和使用的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Django添加feeds功能的示例

    Django添加feeds功能的示例

    這篇文章主要介紹了Django添加feeds功能的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python散列表(Hash Table)的實(shí)現(xiàn)示例

    Python散列表(Hash Table)的實(shí)現(xiàn)示例

    散列表是一種常用于實(shí)現(xiàn)關(guān)聯(lián)數(shù)組或映射的數(shù)據(jù)結(jié)構(gòu),本文我們將深入講解Python中的散列表,包括散列函數(shù)、沖突解決方法、散列表的實(shí)現(xiàn)和應(yīng)用場景,感興趣的可以了解一下
    2024-01-01
  • TensorFlow keras卷積神經(jīng)網(wǎng)絡(luò) 添加L2正則化方式

    TensorFlow keras卷積神經(jīng)網(wǎng)絡(luò) 添加L2正則化方式

    這篇文章主要介紹了TensorFlow keras卷積神經(jīng)網(wǎng)絡(luò) 添加L2正則化方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python實(shí)現(xiàn)畫圓功能

    python實(shí)現(xiàn)畫圓功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)畫圓功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python實(shí)現(xiàn)自動打開電腦應(yīng)用的示例代碼

    Python實(shí)現(xiàn)自動打開電腦應(yīng)用的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)自動打開電腦應(yīng)用的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • scrapy爬蟲遇到j(luò)s動態(tài)渲染問題

    scrapy爬蟲遇到j(luò)s動態(tài)渲染問題

    本文主要介紹了scrapy爬蟲遇到j(luò)s動態(tài)渲染問題,通過js渲染出來的動態(tài)網(wǎng)頁的內(nèi)容與網(wǎng)頁文件內(nèi)容是不一樣的,本文就來解決一下這些問題,感興趣的可以了解一下
    2022-05-05
  • 使用Python寫一個(gè)小游戲

    使用Python寫一個(gè)小游戲

    這篇文章主要介紹了使用Python快速寫一個(gè)小游戲,本次開發(fā)的小游戲叫alien invasion,具體實(shí)現(xiàn)過程大家參考下本文
    2018-04-04
  • 使用清華源安裝Python包并配置鏡像的全方位教程

    使用清華源安裝Python包并配置鏡像的全方位教程

    這篇文章主要介紹了使用清華源安裝Python包并配置鏡像的相關(guān)資料,涵蓋配置方法、常見安裝方式及鏡像源優(yōu)勢,幫助開發(fā)者提升依賴管理效率,需要的朋友可以參考下
    2025-05-05

最新評論

锡林浩特市| 南乐县| 渝北区| 襄城县| 天全县| 安康市| 昌图县| 文昌市| 南涧| 双鸭山市| 台州市| 阳春市| 富宁县| 乡城县| 鹿邑县| 黑水县| 金门县| 湖北省| 宝应县| 进贤县| 瓦房店市| 江城| 玉田县| 柏乡县| 武胜县| 北流市| 茌平县| 新干县| 白水县| 开江县| 鄂尔多斯市| 会宁县| 渭源县| 大渡口区| 昌图县| 贵港市| 平谷区| 夏邑县| 金山区| 孟村| 林口县|