我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Python怎么提取PDF表格

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Python怎么提取PDF表格

这篇文章给大家介绍使用Python怎么提取PDF表格,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

  • 提取简单型表格

  • 提取较为复杂型表格

  • 提取图片型表格

使用Python怎么提取PDF表格

用到的模块主要有

  • pdfplumber

  • pandas

  • Tesseract

  • PIL

文中出现的PDF材料是在巨潮资讯官网下载的公开PDF文件,主题是关于理财的,相关发布信息等信息如下:

使用Python怎么提取PDF表格

内容总共有6页,后文中的例子会有展示。

一、简单文本类型数据

简单文本类型表格就是一页PDF中只有一个表格,并且表格内容完整可复制,例如我们选定内容为PDF中的第四页,内容如下:

使用Python怎么提取PDF表格

可以看到,该页只有一个表格,下面我们将这个表写入Excel中,先上代码

import pdfplumber as primport pandas as pdpdf = pr.open('关于使用自有资金购买银行理财产品的进展公告.PDF')ps = pdf.pagespg = ps[3]tables = pg.extract_tables()table = tables[0]print(table)df = pd.DataFrame(table[1:],columns = table[0])for i in range(len(table)):    for j in range(len(table[i])):        table[i][j] = table[i][j].replace('\n','')df1 = pd.DataFrame(table[1:],columns = table[0])df1.to_excel('page2.xlsx')

得到的结果如下:

使用Python怎么提取PDF表格

通过与PDF上原表格对比,在内容上是完全一致的,唯一不同的是由于主营业务内容较多,导致显示的不全面,现在来说说这段代码。

首先导入要用到的两个库。在pdfplumber中,open()函数是用来打开PDF文件,该代码用的是相对路径。.open().pages则是获取PDF的页数,打印ps值可以得到如下

使用Python怎么提取PDF表格

pg = ps[3]代表的就是我们所选的第三页。

pg.extract_tables():可输出页面中所有表格,并返回一个嵌套列表,其结构层次为table→row→cell。此时,页面上的整个表格被放入一个大列表中,原表格中的各行组成该大列表中的各个子列表。若需输出单个外层列表元素,得到的便是由原表格同一行元素构成的列表。

与其类似的是pg.extract_table( ):返回多个独立列表,其结构层次为row→cell。若页面中存在多个行数相同的表格,则默认输出顶部表格;否则,仅输出行数最多的一个表格。此时,表格的每一行都作为一个单独的列表,列表中每个元素即为原表格的各个单元格内容。

由于该页面中只有一个表格,我们需要tables集合中的第一个元素。打印table值,如下:

使用Python怎么提取PDF表格

可以看到在上述中是存在\n这种没不要的字符,它的作用其实是换行但我们在Excel中是不需要的。所以需要剔除它,用代码中的for循环与replace函数将控制替换成空格(即删除\n)。观察table是一个装有2个元素的列表。

最后df1 = pd.DataFrame(table[1:],columns = table[0])这段代码的作用就是创建一个数据框,将内容放到对应的行列中。

本代码只是简单将数据存入到Excel,如果你需要进一步对样式进行调整,可以使用openpyxl等模块进行修改。

二、复杂型表格提取

复杂型表格即表格样式不统一或一页中有多个表格,以PDF中的第五页为例:

使用Python怎么提取PDF表格

可以看到本页中有两个大的表格,并且细看的话,其实是4个表格,按照简单型表格类型提取方法,得到的效果如下:

使用Python怎么提取PDF表格

可以看到,只是将全部表格文本提取出来,但实际上第一个表格又细分为两个表,所以需要我们进一步修改,将这张表再次拆分!例如提取上半部分代码如下:

import pdfplumber as primport pandas as pdpdf = pr.open('关于使用自有资金购买银行理财产品的进展公告.PDF')ps = pdf.pagespg = ps[4]tables = pg.extract_tables()table = tables[0]print(table)df = pd.DataFrame(table[1:],columns = table[0])for i in range(len(table)):    for j in range(len(table[i])):        table[i][j] = table[i][j].replace('\n','')df1 = pd.DataFrame(table[1:],columns = table[0])df2 = df1.iloc[2:,:]df2 = df2.rename(columns = {"2019年12月31日":"2019年1-12月","2020年9月30日":"2020年1-9月"})df2 = df2.loc[3:,:]df1 = df1.loc[:1,:]with pd.ExcelWriter('公司影响.xlsx') as i:    df1.to_excel(i,sheet_name='资产', index=False, header=True) #放入资产数据    df2.to_excel(i,sheet_name='营业',index=False, header=True) #放入营业数据

这段代码在简单型表格提取的基础上进行了修改,第十四行代码的作用就是提取另外一个表头的信息,并将他赋值给df2,而后对df2进行重命名操作(用到rename函数)。

打印df2可以看出columns列名和第一行信息重复了,因此我们需要重复刚刚的步骤,利用loc()函数切割数据框。

注意,我们这里用了罕见的pandas.Excelwriter函数套for循环,这个是为了避免直接写入导致的最后数据覆盖原数据,感兴趣可以尝试一下不用withopen这种方法后结果。最终得到的效果如下:

使用Python怎么提取PDF表格

使用Python怎么提取PDF表格

可以看到,现在这个表格就被放在两个sheet中单独展示,当然用于对比放在一张表中也是可以的

使用Python怎么提取PDF表格

说到底复杂型表格的主观性是非常大的,需要根据不同情况进行不同处理,想写出一个一劳永逸的办法是比较困难的!

三、图片型表格提取

最后也是最难处理的就是图片型表格,经常有人会问如何提取图片型PDF中的表格/文本等信息。

其实本质上就是提取图片,之后如何对图片进一步处理提取信息就与Python提取PDF表格这个主题没有太大关系了!

这里我们也简单进行介绍,也就是先提取图片再进行OCR识别提取表格,在Python中可以使用Tesseract库,首先需要pip安装

pip install pytesseract

在Python中安装完这个库之后我们需要安装exe文件以在后面代码用到。

http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe

下载安装完即可,注意目前如果按照正常步骤安装的话是不会识别中文的,所以需要安装简体中文语言包,下载地址为https://github.com/tesseract-ocr/tessdata/find/master/chi_sim.traineddata,将其放到Tesseract-OCR的tessdata目录下即可。

接下来我们使用一个简单的图片型pdf如下:

使用Python怎么提取PDF表格

第一步,提取图片,这里使用在GUI办公自动化系列中的图片提取软件来提取PDF中的图片,得到如下图片:

使用Python怎么提取PDF表格

接着执行下方代码识别图片内容

import pytesseractfrom PIL import Imageimport pandas as pdpytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'tiqu = pytesseract.image_to_string(Image.open('图片型.jpg'))print(tiqu)tiqu = tiqu.split('\n')while '' in tiqu:    #不能使用for  tiqu.remove('')  first = tiqu[:6]  second = tiqu[6:12]  third =  tiqu[12:]  df = pd.DataFrame()  df[first[0]] = first[1:]  df[second[0]] = second[1:]  df[third[0]] = third[1:]#df.to_excel('图片型表格.xlsx')  #转为xlsx文件

我们的思路是用Tesseract-OCR来解析图片,得到一个字符串,接着对字符串运用split函数,把字符串变成列表同时删除\n。

接着可以发现我们的列表里还存在空格,这时我们用while循环来删除这些空字符,注意,这里不能用for循环,因为每次删除一个,列表里的元素就会前进一个,这样会删不完全。最后就是用pandas把这些变成数据框形式。最终得到的效果如下:

使用Python怎么提取PDF表格

关于使用Python怎么提取PDF表格就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Python怎么提取PDF表格

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Python怎么提取PDF表格

这篇文章给大家介绍使用Python怎么提取PDF表格,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。提取简单型表格提取较为复杂型表格提取图片型表格用到的模块主要有pdfplumberpandasTesseractPIL文
2023-06-14

如何利用Python提取pdf中的表格数据(附实战案例)

从PDF表格中获取数据是一项痛苦的工作,下面这篇文章主要给大家介绍了关于如何利用Python提取pdf中的表格数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

怎么用Python批量提取PDF中的信息

要使用Python批量提取PDF中的信息,可以使用Python的一个库叫做PyPDF2。下面是一个简单的例子,可以帮助你开始提取PDF中的文本信息:首先,你需要安装PyPDF2库。可以使用以下命令在终端或命令提示符中安装该库:pip i
怎么用Python批量提取PDF中的信息
2024-02-29

Python中怎么PDF文件提取数据

这篇文章将为大家详细讲解有关Python中怎么PDF文件提取数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。示例:使用Python从PDF文件中提取一个表格a) 将表复制到Excel并保存
2023-06-16

Python怎么从不同表格中提取数据

Python怎么从不同表格中提取数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。获取谷歌表格数据访问谷歌表格是这三种方法中最复杂的,因为你需要在使用谷歌表格API前设置一些证
2023-06-16

怎么用Perl抓取网页和提交表格

这篇文章主要介绍了怎么用Perl抓取网页和提交表格,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用Perl抓取网页和提交表格这里简单介绍一下用Perl来实现抓好取网页的源代码
2023-06-17

怎么用python实现读取xlsx表格

今天小编给大家分享一下怎么用python实现读取xlsx表格的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言快要过年了,现
2023-06-29

Python中怎么使用pdfplumber读取PDF写入Excel

本篇内容介绍了“Python中怎么使用pdfplumber读取PDF写入Excel”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Pyth
2023-07-02

使用python怎么提取html文本

这期内容当中小编将会给大家带来有关使用python怎么提取html文本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。# coding: utf-8from time import timeimport w
2023-06-15

python怎么遍历列表并提取

Python遍历列表可以使用for循环,然后使用索引或值来提取列表中的元素。下面是几种常见的遍历列表并提取元素的方法:使用索引遍历列表并提取元素:my_list = [1, 2, 3, 4, 5]for i in range(len(m
2023-10-26

Python中JsonPath提取器和正则提取器怎么使用

这篇文章主要介绍了Python中JsonPath提取器和正则提取器怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中JsonPath提取器和正则提取器怎么使用文章都会有所收获,下面我们一起来看
2023-07-05

怎么使用Node.js来读取表格的数据

这篇文章主要介绍“怎么使用Node.js来读取表格的数据”,在日常操作中,相信很多人在怎么使用Node.js来读取表格的数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Node.js来读取表格的数据
2023-07-05

jmeter正则表达式提取器怎么使用

这篇文章主要介绍“jmeter正则表达式提取器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jmeter正则表达式提取器怎么使用”文章能帮助大家解决问题。使用方法1,把正则表达式添加到需要提
2023-07-02

python怎么用正则表达式提取字符串

今天小编给大家分享一下python怎么用正则表达式提取字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。用正则表达式提取字
2023-07-05

怎么使用Python打印漂亮的表格

本篇内容主要讲解“怎么使用Python打印漂亮的表格”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python打印漂亮的表格”吧!第一种:使用 format先来看几个小 demo左对齐>
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录