1. 引言

PDF文档是我们在日常工作中经常会遇到的文件格式,有时我们需要编辑并从中提取一些有用的数据。在本文中,我将向大家介绍如何使用Python中的PDF库从PDF文档中提取文本、表格和图像以及其他类型的数据。
闲话少说,我们直接开始吧!

2. 从PDF文件中获取文本

在Python中有多种库可以帮助我们方便的从PDF文件中获取对应的文本,其中最为常用的是PyPdf2,我们不妨来举个栗子来看看相应的函数的使用方法。

样例代码如下:

# importing module
import PyPDF2# create a pdf file object
pdfFileObj = open('file.pdf', 'rb')# create a pdf reader object
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)# creating a page object
pageObj = pdfReader.getPage(0)# extracte text from page
print(pageObj.extractText())# closing the pdf file object
pdfFileObj.close()

在上述代码中,我们逐行来分析:

  • 首先我们导入我们的第三方库PyPDF2
  • 接着我们使用函数open()以二进制方式读入我们的PDF文件
  • 将读入的文件对象传递给PdfFileReader函数
  • 获取PDF某个页面的对象,生成pageObj
  • 使用函数extractText()来提取文本信息
  • 最后我们使用close函数来将PdfFileObj关闭

最终,关闭文件是必须的。如果我们让它保持打开状态,并试图读取另一个文件,此时它会给我们提示一个文件读取的错误。
上述代码展示了提取单个页面的逻辑,进而我们可以使用循环语句来读取所有的页面,样例代码如下:

# importing module
import PyPDF2# create a pdf file object
pdfFileObj = open('file.pdf', 'rb')# create a pdf reader object
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)for i in range(pdfReader.numPages):pageObj = pdfReader.getPage(i)print(pageObj.extractText())# closing the pdf file object
pdfFileObj.close()

举例,假设我们需要的PDF文件如下:

则上述代码的运行结果如下:

A Simple PDF File  This is a small demonstration .pdf file -
just for use in the Virtual Mechanics tutorials. More text. And more
text. And more text. And more text. And more text.
And more text. And more text. And more text. And more text. And more
text. And more text. Boring, zzzzz. And more text. And more text. And
more text. And more text. And more text. And more text. And more text.
And more text. And more text.
And more text. And more text. And more text. And more text. And more
text. And more text. And more text. Even more. Continued on page 2 ...

3. 从PDF文件中获取表格

使用PyPDF2提取表不太方便,为了正确地从PDF文件中提取表格,我们需要采用计算机视觉的方法首先检测这些表格,然后进行机器学习计算,最后在将其提取出来。

为了完成这项任务,这里推荐一个第三方python模块,叫做Tabula,该模块专门用于从pdf中读取和提取表格,并以CSV格式存储。

样例代码如下:

import tabula# Read pdf into list of DataFrame
df = tabula.read_pdf("test.pdf", pages='all')
print(df)

上述代码的解析如下:

  • 首先我们引入我们所需的第三方库tabula
  • 接着我们使用函数read_pdf来读取pdf文件,并提取所有页面中的表格
  • 最后我们使用打印函数将提取到的表格进行打印

当然,我们也可以将提取得到的数据以csv的方式进行存储,样例代码如下:

import tabula# convert PDF into CSV file
tabula.convert_into("test.pdf", "output.csv", output_format="csv", pages='all')

4. 从PDF文件中获取图片

在Python中为了从PDF文件中提取图像,我们必须使用其他第三方模块。

安装我们所需的第三方库PyMuPDF以及图像处理库Pillow,安装代码如下:

pip install PyMuPDF Pillow

从PDF文件中提取图片的示例代码如下:

import fitz
import io
from PIL import Imagepdf_file = fitz.open("test2.pdf")
# iterate over PDF pagesfor page_index in range(len(pdf_file)):# get the page itselfpage = pdf_file[page_index]image_list = page.getImageList()for image_index, img in enumerate(page.getImageList(), start=1):# get the XREF of the imagexref = img[0]# extract the image bytesbase_image = pdf_file.extractImage(xref)image_bytes = base_image["image"]# get the image extensionimage_ext = base_image["ext"]# load it to PILimage = Image.open(io.BytesIO(image_bytes))# save itimage.save(open(f"image{page_index+1}_{image_index}.{image_ext}", "wb"))

假设我们的PDF文件内容如下:

我们测试上述代码,得到结果如下:

5. 总结

本文重点介绍了在Python中如何利用功能强大的第三方库来从PDF文件中获取文本表格和图像数据,并给出了相应的代码示例!

您学废了吗?


关注公众号《AI算法之道》,获取更多AI算法资讯。

在Python中如何优雅地处理PDF文件相关推荐

  1. 全网惟一面向软件测试人员的Python基础教程-在Python中如何优雅的切西瓜呢?

    全网惟一面向软件测试人员的Python基础教程 起点:<python软件测试实战宝典>介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你 ...

  2. Python中如何优雅地使用switch语句

    文章目录 Python中如何优雅地使用switch语句 案例一(简单情况) 案例二(带条件判断) 版权声明:本文为博主原创文章,转载请注明原文出处! 写作时间:2019-03-07 13:49:45 ...

  3. python同时打开两个文件_在python中使用with打开多个文件的方法

    虽然初恋是java, 可是最近是越来越喜欢python, 所以决定追根溯源好好了解下python的原理,架构等等.小脑袋瓜不太好使,只能记录下慢慢进步吧 使用with打开文件的好处不多说,这里记录一下 ...

  4. python使用fpdf生成结账发票pdf文件

    python使用fpdf生成结账发票pdf文件 目录 python使用fpdf生成结账发票pdf文件 #仿真数据 #生成pdf pip install fpdf

  5. python使用fpdf生成数据报告pdf文件

    python使用fpdf生成数据报告pdf文件 目录 python使用fpdf生成数据报告pdf文件 # 报告生成整体代码

  6. 利用python中的csv库读写csv文件

    利用python中的csv库读写csv文件 python读写csv文件就我知道的方法有:1)利用csv库,2)利用读写txt文件的方式处理,3)利用numpy或pandas库处理 在这篇博客中,博主就 ...

  7. 批量爬取巨潮资讯网中“贵州茅台”相关公告的PDF文件。

    1 需求 批量爬取巨潮资讯网中"贵州茅台"相关公告的PDF文件. 2 代码实现 import reimport requests from selenium import webd ...

  8. Python中比较好用的PDF模块——发票金额提取

    参考文档:常用Python PDF库对比 上文中:列举了几个常用的Python中PDF的模块. 我自己的应用场景是将发票金额提取,并用金额去命名pdf文件名. 经过个人测试:PyMuPDF模块效果显著 ...

  9. python ocr 识别中文pdf_pytesseract识别PDF文件中的文字(OCR)

    前言:由于要利用一些比较老的文献中的数据,手工输入费时费力,于是乎找到了下面的方法.如果不差钱可以使用Adobe Acrobat Reader中的文字识别,也可以尝试其中的试用版.下面的方法完全室开源 ...

  10. python pdf转图片 poppler_如何使用Python中的poppler库从pdf中提取图像?

    我有一个pdf,我想用 Python提取一些图像.我可以使用poppler-utils库 like this中的pdfimages从Linux命令行轻松提取图像: pdfimages my_file. ...

最新文章

  1. (送)Java 架构技术揭秘:Redis+Nginx+Dubbo精选+面试题+精选视频
  2. 蓝桥杯来了?最后节点了,这不得共享一波资源?
  3. 电脑怎样执行编程语言的?
  4. 汇编_指令_FLAGS
  5. LeetCode 1641. 统计字典序元音字符串的数目(DP)
  6. shocked的歌曲 类似shell_Shell Shocked
  7. JavaScript 从数组中删除元素方法
  8. C++学习008-delete与delete[]的差别
  9. 城市不透水面空间分析——以宁波为例
  10. nginx 502 .sock failed (11: Resource temporarily unavailable) while connecting to upstream
  11. 用 WebSocket 实现一个简单的客服聊天系统
  12. Solr学习总结(五)SolrNet的基本用法及CURD
  13. docker 批量关闭处于exited状态的container容器--shell工具
  14. chrome开发者工具实现网页截长图
  15. 小A与小姐姐给气球涂色 题目描述 小A与小姐姐闲的无聊,它们路过一家商店,看见里面有很多无色的气球,于是他们突然有一
  16. Windows 徽标键相关的快捷键
  17. 用Unity做一个小Demo入门Unity
  18. PythonOCC基础使用:基础建模指令(重要)
  19. pandas选取数据方法
  20. 隐藏删除 gitbook Published with GitBook 的方法

热门文章

  1. SwitchHost自动配置Github520
  2. Navicat基础mysql语法
  3. 电脑表格软件哪个好用---办公软件推荐
  4. Activiti6常见错误汇总
  5. EndnoteX7/8/9参考文献不按顺序出现
  6. 在线JSON转Excel
  7. 人工智能-动物识别专家系统(pyqt5)
  8. tomcat打印日志乱码_针对tomcat日志乱码问题
  9. nodejs下载集成到idea
  10. 贝叶斯网络(数据预测)Python代码资源推荐