脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python自动化办公实战:PDF文本提取技巧

Python自动化办公实战:PDF文本提取技巧

2023-11-21 15:33Python都知道 Python

在本文中,我们将介绍如何使用Python中的PyPDF2库来提取PDF文件中的内嵌文字内容。

PDF文件具有跨平台的特点,可以在不同的操作系统和设备上保持一致的显示效果。但是,PDF文件也有一些缺点,比如不易编辑、复制和搜索。如果我们想要从PDF文件中提取文本内容,该怎么办呢?

在本教程中,我们将介绍如何使用Python中的PyPDF2库来提取PDF文件中的内嵌文字内容。PyPDF2是一个纯Python的库,可以读取、分割、合并、裁剪和转换PDF文件。它不需要安装任何其他的依赖库,也不需要调用外部的程序或服务。

Python自动化办公实战:PDF文本提取技巧

安装PyPDF2库

要使用PyPDF2库,我们首先需要安装它。我们可以使用pip命令来安装,如下所示:

pip install PyPDF2

如果安装成功,我们可以在Python中导入PyPDF2模块,如下所示:

import PyPDF2

读取PDF文件

要从PDF文件中提取文本内容,我们首先需要读取PDF文件。我们可以使用PyPDF2.PdfReader类来创建一个PDF文件的读取对象,然后传入一个文件对象或一个文件路径作为参数。例如,假设我们有一个名为sample.pdf的PDF文件,我们可以用以下代码来读取它:

# 通过文件对象来读取
with open("sample.pdf", "rb") as f: # 以二进制模式打开文件
    reader = PyPDF2.PdfReader(f) # 创建一个PdfFileReader对象

# 通过文件路径来读取
reader = PyPDF2.PdfReader("sample.pdf") # 创建一个PdfFileReader对象

注意,我们必须以二进制模式("rb")来打开PDF文件,否则会出现错误。

获取PDF文件的基本信息

在读取了PDF文件之后,我们可以使用PdfReader对象的一些属性和方法来获取PDF文件的基本信息,例如页数、作者、标题等。例如:

# 获取页数
num_pages = len(reader.pages) # 返回一个整数,表示PDF文件的总页数
print(f"该PDF文件共有{num_pages}页")

# 获取作者
author = reader.metadata.author # 返回一个字符串,表示PDF文件的作者信息
print(f"该PDF文件的作者是{author}")

# 获取标题
title = reader.metadata.title # 返回一个字符串,表示PDF文件的标题信息
print(f"该PDF文件的标题是{title}")

提取单页文本内容

要从单页中提取文本内容,我们可以使用PdfReader对象的pages来获取指定页码的页面对象(PyPDF2.pdf.PageObject类),然后使用页面对象的extract_text()方法来获取页面中的文本内容。例如:

# 获取第一页的页面对象
page1 = reader.pages[0]# 传入一个整数作为参数,表示页码(从0开始)

# 提取第一页的文本内容
text1 = page1.extract_text() # 返回一个字符串,表示页面中的文本内容

# 打印第一页的文本内容
print(text1)

注意,extract_text()方法只能提取内嵌文字内容,不能提取图像或其他元素。另外,提取出来的文本内容可能不完全符合原始格式,可能存在换行、空格、缺失等问题。

提取多页文本内容

要从多页中提取文本内容,我们可以使用一个循环来遍历PdfReader对象的每一页,然后使用extract_text()方法来获取每一页的文本内容,并将它们拼接成一个完整的字符串。例如:

# 创建一个空字符串,用于存储所有页面的文本内容
text = ""

# 遍历每一页
for i in range(num_pages):
    # 获取当前页的页面对象
    page = reader.pages[i]
    # 提取当前页的文本内容
    page_text = page.extract_text()
    # 将当前页的文本内容添加到总字符串中
    text += page_text

# 打印所有页面的文本内容
print(text)

保存提取的文本内容

提取了PDF文件中的文本内容之后,我们可以将它保存到一个文本文件中,以便后续的处理或分析。我们可以使用Python的内置函数open()来创建一个文本文件对象,然后使用write()方法来写入提取的文本内容。例如:

# 创建一个名为output.txt的文本文件对象,以写入模式打开
with open("output.txt", "w", encoding="utf-8") as f: # 指定编码为utf-8,避免乱码
    # 将提取的文本内容写入到文件中
    f.write(text)

注意,我们需要指定编码为utf-8,以避免出现乱码。

如下是:sample.pdf和output.txt文件的部分截图

Python自动化办公实战:PDF文本提取技巧

总结

在本教程中,我们介绍了如何使用Python中的PyPDF2库来提取PDF文件中的内嵌文字内容。我们首先安装了PyPDF2库,并导入了PyPDF2模块。然后,我们使用PyPDF2.PdfReader类来读取PDF文件,并获取了PDF文件的基本信息。接着,我们使用pages和extract_text()方法来提取单页或多页的文本内容,并将它们保存到一个文本文件中。通过这些操作,我们可以实现Python自动化办公的一个功能,即从PDF文件中提取文本内容。

原文地址:https://mp.weixin.qq.com/s?__biz=MzkwMDE4NzE5OQ==&mid=2247501688&idx=1&sn=f012b3e5d99f98804469237a62bb0432

延伸 · 阅读

精彩推荐
  • Python在Python的Flask框架中使用模版的入门教程

    在Python的Flask框架中使用模版的入门教程

    这篇文章主要介绍了在Python的Flask框架中使用模版的入门教程,模版的使用是Flask使用当中的基础,需要的朋友可以参考下...

    脚本之家5622020-06-09
  • PythonPython 爬虫模拟登陆知乎

    Python 爬虫模拟登陆知乎

    这篇文章主要介绍了Python 爬虫模拟登陆知乎的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    O卖女孩的小火柴O3832020-09-09
  • PythonPyQt5 实现字体大小自适应分辨率的方法

    PyQt5 实现字体大小自适应分辨率的方法

    今天小编就为大家分享一篇PyQt5 实现字体大小自适应分辨率的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    qfxx_csdn11382021-07-14
  • PythonPython打印斐波拉契数列实例

    Python打印斐波拉契数列实例

    这篇文章主要介绍了Python打印斐波拉契数列的方法,实例分析了基于Python实现斐波那契数列的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    defias7472020-07-20
  • PythonPython cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作

    Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹

    这篇文章主要介绍了Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作,涉及Python使用str.startswith()和str.endswith()方法针对字符串开始或结...

    垄上行5882021-02-03
  • Python用python爬虫爬取CSDN博主信息

    用python爬虫爬取CSDN博主信息

    这篇文章主要介绍了如何用python爬虫获取CSDN博主信息的方法,原理和代码写的非常详细,对大家学习Python爬取很有用处,有需要的朋友可以和小编一起看一下...

    皖渝11142021-10-09
  • PythonAppium自动化测试实现九宫格解锁

    Appium自动化测试实现九宫格解锁

    本文主要介绍了Appium自动化测试实现九宫格解锁,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    测试之路king7232022-09-27
  • PythonPython中内建函数的简单用法说明

    Python中内建函数的简单用法说明

    这篇文章主要介绍了Python中内建函数的简单用法说明,包括apply()、filter()、reduce()、map()四个函数的用法讲解,需要的朋友可以参考下...

    larry4412020-08-22