编程学习网 > 编程语言 > Python > Python教程-使用 Python 读取并解析 PDF 文件
2024
09-20

Python教程-使用 Python 读取并解析 PDF 文件


PDF,几乎每个人都不陌生的文件格式。作为一名开发者,如何自动化地处理 PDF,读取其中的内容,成为了一个必须掌握的技能。而幸运的是,Python 作为我们的万能工具箱,提供了多种处理 PDF 文件的第三方库。本文会聚焦三个常用的 Python PDF 库:PyPDF2pdfplumberPDFMiner。它们各有千秋,性能、功能、以及易用性都有所不同。

01常见需求                                
解析 PDF 的常见需求提取文本:从 PDF 中提取出文本,用来后续分析、处理。
提取表格:一些 PDF 里包含结构化数据,尤其是表格,需要自动化提取。
批量处理:一次性处理成百上千的 PDF 文件,无需手动操作。
合并或拆分 PDF:有时候我们需要将多个 PDF 合并,或者从大文件中拆分出某几页。
数据抓取:需要从网页上下载 pdf 文件并识别提取某些数据;

02解析库的较量                          
接下来,我们将从这三大主流库的功能、优缺点等方面做个详细对比,帮助你找到最适合自己的解析工具。

1. PyPDF2:简洁易用,功能齐全的老牌选手
优点
易用性强:PyPDF2 是老牌的 PDF 库,API 简单直接,非常容易上手,适合初学者。
基础功能齐全:不仅可以解析 PDF 文本,还可以合并、拆分 PDF 文件,甚至可以加密和解密 PDF。
跨平台支持:适用于 Windows、Linux、MacOS 等主流平台。

缺点
处理复杂 PDF 文件时有些力不从心:虽然它对简单的文本提取十分顺手,但面对带有复杂布局的 PDF 文件(比如多列、表格等),提取出来的文本可能会乱序或混乱。
不支持表格提取:PyPDF2 无法很好地处理 PDF 中的表格。

代码示例:使用 PyPDF2 提取 PDF 文本
让我们用 PyPDF2 来提取一个简单 PDF 文件中的文本:
import PyPDF2

# 打开 PDF 文件
with open("example.pdf", "rb") as file:
    # 创建 PDF 读取器
    reader = PyPDF2.PdfReader(file)
    
    # 初始化文本容器
    text = ""
    
    # 遍历每一页,提取文本
    for page_num in range(len(reader.pages)):
        page = reader.pages[page_num]
        text += page.extract_text()
    
    print(text)


运行这段代码,你就可以得到整个 PDF 的文本内容了。简单、快捷、好用,但请注意:如果 PDF 过于复杂,提取的结果可能并不理想。

2. pdfplumber:精细化文本与表格提取的好帮手

优点
文本、表格提取一网打尽:pdfplumber 的最大亮点在于它不仅能提取文本,还能高效处理 PDF 中的表格,甚至还能抓取页面上的图像等内容。
精细控制:pdfplumber 提供了对 PDF 页面结构的细致控制,适合需要精准提取的场景,比如财务报表、合同、调查问卷等。

缺点
相对较慢:由于它能解析更多复杂的内容,因此相比其他库,处理速度稍慢。
学习曲线稍高:它的功能强大,意味着你需要花更多时间学习如何正确使用,特别是表格提取部分。
代码示例:使用 pdfplumber 提取文本和表格
import pdfplumber

# 打开 PDF 文件
with pdfplumber.open("example.pdf") as pdf:
    # 提取第一页的内容
    first_page = pdf.pages[0]
    
    # 提取文本
    text = first_page.extract_text()
    print("文本内容:")
    print(text)
    
    # 提取表格
    tables = first_page.extract_tables()
    print("表格内容:")
    for table in tables:
        for row in table:
            print(row)

在这段代码中,我们不仅提取了文本,还提取了表格。pdfplumber 在处理表格方面表现出色,非常适合需要解析结构化数据的场景。

3. PDFMiner:深度解析 PDF 的硬核工具
优点
解析能力极强:PDFMiner 的解析功能非常强大,它能够识别出 PDF 中的文本、字体、段落等复杂布局。它不只是简单地提取内容,还能恢复文档的结构和层次。
精细提取:可以按照字符、行、段落等不同粒度来提取文本,适合需要对文档有深入分析的场景。
缺点
使用稍复杂:由于其功能强大,API 也较为复杂,对于新手而言,学习成本略高。
速度较慢:由于需要深度解析,PDFMiner 在处理复杂 PDF 时速度较慢。
代码示例:使用 PDFMiner 提取 PDF 文本
from pdfminer.high_level import extract_text

# 提取文本
text = extract_text("example.pdf")
print(text)

相对于 PyPDF2 和 pdfplumber,PDFMiner 的代码显得相对简单一些,但它在背后做了更多深层次的工作,解析出的文本通常结构更好,特别是对多列文本和带有复杂格式的 PDF 文件效果更好。

03库功能大比拼                          
选择最适合你的解析工具让我们来个大比拼,将这三大库的优缺点直观地对比一下:功能 PyPDF2 pdfplumber PDFMiner 
 
 
结论
如果你是 PDF 处理的初学者,且需要快速上手,PyPDF2 是最好的选择。
如果你需要精准提取文本和表格,尤其是面对带有结构化数据的 PDF,pdfplumber 无疑是你的最佳选择。
如果你的 PDF 文件非常复杂,带有多列文本或复杂布局,且你希望尽可能恢复文档的结构,PDFMiner 是首选。


04实战应用                               
批量解析 PDF 文件假设我们现在有一堆 PDF 文件,急需从中提取出文本内容并进行批量处理。接下来,我们将展示如何利用上述库来批量处理 PDF 文件,并将结果保存到文本文件中。

批量处理代码示例:
import os
import PyPDF2

def extract_text_from_pdfs(directory):
    for filename in os.listdir(directory):
        if filename.endswith(".pdf"):
            filepath = os.path.join(directory, filename)
            with open(filepath, "rb") as file:
                reader = PyPDF2.PdfReader(file)
                text = ""
                for page_num in range(len(reader.pages)):
                    page = reader.pages[page_num]
                    text += page.extract_text()
                
                # 保存提取的文本
                with open(f"{filename}.txt", "w", encoding="utf-8") as text_file:
                    text_file.write(text)
            print(f"已提取:{filename}")

extract_text_from_pdfs("pdf_folder")
这个简单的脚本遍历文件夹中的所有 PDF 文件,提取其中的文本并将其保存为 .txt 文件。你可以根据需要选择使用不同的 PDF 库来替换 PyPDF2。

05小结                                     
通过本文,我们详细对比了三大常用的 Python PDF 解析库 PyPDF2、pdfplumber 和 PDFMiner,各有千秋,适用于不同的场景。你可以根据具体需求选择最适合的库,并借助本文的代码示例快速上手。
在技术的世界里,工具是我们的伙伴,而最重要的,还是如何灵活运用它们。无论是简单的 PDF 文本提取,还是复杂的表格和图像解析,Python 都能帮你轻松搞定。

以上就是Python教程-使用 Python 读取并解析 PDF 文件的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取