Python pdfplumber库:轻松解析PDF文件

Python pdfplumber库:轻松解析PDF文件

    • 1. 安装
    • 2. 基本概念
    • 3. 使用场景和示例代码
      • 3.1 提取文本
      • 3.2 提取表格数据
      • 3.3 获取图像信息
      • 3.4 分析页面布局
      • 3.5 搜索特定文本
    • 4. 总结

在处理PDF文件时,我们经常需要提取文本、图像或表格数据。Python的pdfplumber库为这些任务提供了强大而灵活的解决方案。本文将介绍pdfplumber的基本概念和常见使用场景,并通过示例代码展示如何使用该库。

1. 安装

首先,我们需要安装pdfplumber库:

pip install pdfplumber

2. 基本概念

pdfplumber主要提供以下功能:

  • 提取PDF页面中的文本
  • 提取表格数据
  • 获取图像信息
  • 分析页面布局
  • 搜索特定文本

pdfplumber将PDF文件视为一系列页面对象,每个页面包含文本、线条、矩形和其他图形元素。

3. 使用场景和示例代码

3.1 提取文本

最基本的操作是从PDF中提取文本。以下是一个简单的例子:

import pdfplumberdef extract_text(pdf_path):with pdfplumber.open(pdf_path) as pdf:text = ""for page in pdf.pages:text += page.extract_text() + "\n"return text# 使用示例
pdf_path = "example.pdf"
extracted_text = extract_text(pdf_path)
print(extracted_text)

这段代码打开PDF文件,遍历所有页面,提取每页的文本并将其连接起来。

3.2 提取表格数据

pdfplumber擅长处理表格数据。以下是从PDF中提取表格的示例:

import pdfplumberdef extract_tables(pdf_path, page_number):with pdfplumber.open(pdf_path) as pdf:page = pdf.pages[page_number]tables = page.extract_tables()return tables# 使用示例
pdf_path = "example_with_tables.pdf"
page_number = 0  # 第一页
tables = extract_tables(pdf_path, page_number)for i, table in enumerate(tables):print(f"Table {i + 1}:")for row in table:print(row)print("\n")

这个函数从指定页面提取所有表格,并以嵌套列表的形式返回。

3.3 获取图像信息

虽然pdfplumber不能直接提取图像,但它可以提供图像的位置和大小信息:

import pdfplumberdef get_image_info(pdf_path):with pdfplumber.open(pdf_path) as pdf:image_info = []for i, page in enumerate(pdf.pages):for image in page.images:info = {'page': i + 1,'x0': image['x0'],'y0': image['top'],'width': image['width'],'height': image['height']}image_info.append(info)return image_info# 使用示例
pdf_path = "example_with_images.pdf"
images = get_image_info(pdf_path)
for img in images:print(f"Image on page {img['page']}: Position ({img['x0']}, {img['y0']}), Size: {img['width']}x{img['height']}")

这段代码遍历PDF中的所有页面,收集每个图像的位置和大小信息。

3.4 分析页面布局

pdfplumber允许我们分析页面的布局,包括文本框、线条和矩形:

import pdfplumberdef analyze_layout(pdf_path, page_number):with pdfplumber.open(pdf_path) as pdf:page = pdf.pages[page_number]# 获取文本框words = page.extract_words()print(f"Number of words: {len(words)}")# 获取线条lines = page.linesprint(f"Number of lines: {len(lines)}")# 获取矩形rects = page.rectsprint(f"Number of rectangles: {len(rects)}")# 使用示例
pdf_path = "example.pdf"
page_number = 0  # 第一页
analyze_layout(pdf_path, page_number)

这个函数分析指定页面的布局,计算文本框、线条和矩形的数量。

3.5 搜索特定文本

pdfplumber还可以用于搜索PDF中的特定文本:

import pdfplumber
import redef search_text(pdf_path, search_term):with pdfplumber.open(pdf_path) as pdf:results = []for i, page in enumerate(pdf.pages):text = page.extract_text()matches = re.finditer(search_term, text, re.IGNORECASE)for match in matches:results.append({'page': i + 1,'text': match.group(),'position': match.start()})return results# 使用示例
pdf_path = "example.pdf"
search_term = "Python"
search_results = search_text(pdf_path, search_term)for result in search_results:print(f"Found '{result['text']}' on page {result['page']} at position {result['position']}")

这个函数在PDF中搜索指定的文本,返回每个匹配项的页码和位置。

4. 总结

pdfplumber是一个强大的Python库,可以轻松处理PDF文件。它提供了丰富的功能,包括文本提取、表格数据提取、图像信息获取、页面布局分析和文本搜索。这些功能使pdfplumber成为数据分析、文档处理和信息提取项目的理想工具。

在实际应用中,pdfplumber可以用于:

  • 自动化数据录入
  • PDF文档的文本挖掘
  • 创建PDF文件的搜索索引
  • 分析和比较PDF报告的结构

希望这篇文章能帮助你更好地理解和使用pdfplumber库。如果你有任何疑问或需要进一步的解释,欢迎在评论区留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长安链安装及使用问题

1. 关于golang编译出错: Get “https://proxy.golang.org/chainmaker.org/chainmaker/common/v2/v/v2.2.0.mod“: dial 在网上查阅资料后发现是自己的golang版本太低(1.3一下),因为goalng在最初开发时,国内基本上都会遇到依赖下载不了的问题, 然而在1.3版本后,go…

简单分享下python的Fuk库

目录: 一、Fuk 简介 二、安装和引入 fuk,使用 pip 安装 fuk 库 三、Fuk的应用场景,网络爬虫 四、总结 一、Fuk 简介 fuk 是一个用于处理 Python 数据结构的库,全称为 "Fast and Uncomplicated Kit"。它提供了一系列高效…

前端代码优化之布尔条件判断太长的处理

我们在开发过程中,有时候会遇到多个布尔值条件判断的情况,目前我们项目里的写法大多都是将各种判断糅杂在一起,这样非常不利于阅读和维护。这里给大家推荐下谷歌官方的处理方式。主要有两种优化方案。 例如,一个判断条件如下&…

【CentOS 7.6】Linux版本 portainer本地镜像导入docker安装配置教程,不需要魔法拉取!(找不着镜像的来看我)

吐槽 我本来根本不想写这篇博客,但我很不解也有点生气,CSDN这么大没有人把现在需要魔法才能拉取的镜像放上来。 你们都不放,根本不方便。我来上传资源。 portainer-ce-latest.tar Linux/amd64 镜像下载地址: 链接:h…

C# --- 在项目中使用Attribute + Reflection

C# --- 使用Attribute Reflection的例子 背景如何定义和执行TestCase 背景 E2E是对workflow的测试,将所有E2E test case定义在一个可执行程序里(exe), 定时自动运行 如何定义和执行TestCase 将需要执行的TestCase包装成一个类,并将TestCase分成几个Step…

Chapter11让画面动起来——Shader入门精要学习笔记

Chapter11让画面动起来 一、Unity Shader中的内置变量(时间篇)二、纹理动画1.序列帧动画2.滚动背景 三、顶点动画1.流动的河流2.广告牌3.注意事项①批处理问题②阴影投射问题 一、Unity Shader中的内置变量(时间篇) Unity Shader…

东北财税之星:董女士的家乡创业记

乐财业智慧财税赋能平台,是一个帮助财税机构专业提升、业务增长,让财税生意更好做的综合赋能平台。聚焦财税公司业绩增长,预计2027年帮助2000家财税合伙人利润增长300%,致力打造轻量化、批量化、智能化的”业财税“一体财税服务生…

ARCGIS PRO 要素标注

一、普通模式 1、标注:名称和面积(无分数线) 语言:Arcade $feature.QLR \nRound($feature.Shape_Area,2) 语言:vbscript [QLR] & " " & Round([Shape_Area],2) 2、标注:名称…

ChatGPT如何提升论文写作(附指令集合)

先讲前提: ChatGPT无论是3.5还是4.0都存在非常严重的幻觉问题,目前ChatGPT无法替代搜索引擎。 如果你希望得到更加优质的体验,请用GPT-4.0,幻觉问题上比3.5大幅降低 ChatGPT中文版,一站式AI创作平台​aibox365.com …

Python | Leetcode Python题解之第203题移除链表元素

题目: 题解: # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def removeElements(self, head: ListNode, val: int) -> Li…

因版本冲突导致logback的debug日志不打印

因框架调整,降级了logback的版本号,由1.3.12降级为1.2.11(因框架限制,只能采用1.2版本),降级后发现debug日志无法打印出来,logback.xml配置文件不生效。后排查发现是与slf4j的版本兼容问题 依赖…

一种频偏估计与补偿方法

一种简易的频偏估计补偿方法,使用QAM等信号。估计精度受FFT长度限制,可以作为粗频偏估计。 Nfft 1024; % FFT长度 N 10*Nfft; % 仿真符号数 M 16; % 调制QAM16 freq 1e…

如何在window 10 服务器上安装Git服务--Gitblit适合小团队

在Windows Server上安装Git服务通常指的是安装一个可以被网络中的其他用户访问的Git服务器。Git本身是一个分布式版本控制系统,但是为了便于团队协作,通常会部署一个中心化的Git服务器,如GitLab、GitHub Enterprise、Gitea、Gitblit等。 这里…

Java中的高级异常处理与日志记录

Java中的高级异常处理与日志记录 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,异常处理和日志记录是两个至关重要的方面。良好的异…

如何选择视频号矩阵系统源码:关键要素与决策指南

在短视频和直播内容迅速崛起的今天,视频号矩阵系统源码成为了企业和个人创作者高效管理视频内容的重要工具。选择合适的视频号矩阵系统源码,可以极大提升内容发布的效率和质量,同时优化用户体验。本文将提供一套选择视频号矩阵系统源码的指南…

MYSQL篇二:数据库的操作

文章目录 1. 创建数据库1.1 查看数据库列表1.2 创建与删除数据库 2. 数据的编码问题3. 字符集和校验规则3.1 查看系统默认字符集以及校验规则3.2 查看数据库支持的字符集3.3 查看数据库支持的字符集校验规则3.4 校验规则对数据库的影响 4. 操纵数据库4.1 查看当前是哪一个数据库…

小程序渗透测试的两种方法——burpsuite、yakit

首先呢主要是配置proxifier,找到小程序的流量,然后使用burpsuite或者yakit去抓包。 一、使用burpsuiteproxifier的抓包测试 1、先配置proxifier,开启http流量转发 勾选确定 2、配置burp对应代理端口,选择profile,点…

java自带工具对象转xml

java自带工具对象转xml,工具是jaxbContext,不废话,直接上代码 java对象 package com.configure.util;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.xml.bind.annotation.XmlAccessType; impo…

《梦醒蝶飞:释放Excel函数与公式的力量》8.7 STDEV函数

8.7 STDEV函数 STDEV函数是Excel中用于计算一组数值的标准偏差的函数。标准偏差是统计学中的一个重要指标,用于衡量数据集中各数值偏离平均值的程度。它反映了数据的离散程度或波动大小。 8.7.1 函数简介 STDEV函数用于返回样本数据的标准偏差,标准偏…

软件测试面试1000问(含答案)

1、自动化代码中,用到了哪些设计模式? 单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果,如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…