广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么提取PDF表格
  • 226
分享到

使用Python怎么提取PDF表格

2023-06-14 11:06:30 226人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

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

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

  • 提取简单型表格

  • 提取较为复杂型表格

  • 提取图片型表格

使用Python怎么提取PDF表格

用到的模块主要有

文中出现的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表格就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 使用Python怎么提取PDF表格

本文链接: https://www.lsjlt.com/news/270602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用Python怎么提取PDF表格
    这篇文章给大家介绍使用Python怎么提取PDF表格,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。提取简单型表格提取较为复杂型表格提取图片型表格用到的模块主要有pdfplumberpandasTesseractPIL文...
    99+
    2023-06-14
  • 用Python提取PDF表格的方法
    目录一、简单文本类型数据二、复杂型表格提取三、图片型表格提取大家好,从PDF中提取信息是办公场景中经常需要用到的操作,也是经常又读者在后台问的一个操作。 内容少的话我们可以手动复制粘...
    99+
    2022-11-12
  • 通过Python的pdfplumber库提取pdf中表格数据
    文章目录 前言一、pdfplumber库是什么?二、安装pdfplumber库三、查看pdfplumber库版本四、提取pdf中表格数据1.引入库2.定义pdf文件路径3.打开pdf文件4.获...
    99+
    2023-09-05
    python pdf 开发语言
  • python pdfplumber库批量提取pdf表格数据转换为excel
    目录需求一、实现效果图二、pdfplumber 库三、代码实现1、导入相关包2、读取 pdf , 并获取 pdf 的页数3、提取单个 pdf 文件,保存成 excel4、提取文件夹下...
    99+
    2022-11-11
  • python用pdfplumber提取pdf表格数据并保存到excel文件中
    目录pdfplumber操作pdf文件一、pdfplumber安装及导入二、pdfplumber基础使用1、基础知识2、获取pdf基础信息3、pdfplumber提取表格数据三、提取...
    99+
    2022-11-11
  • 如何利用Python提取pdf中的表格数据(附实战案例)
    目录前言pdfplumber简介实战案例前言 今天给大家介绍一个Python使用工具,那就是从pdf文件中读取表格数据,主要用到第三方库 pdfplumber。 pdfpl...
    99+
    2022-11-13
    python读取pdf表格数据 Python读取pdf pandas读取pdf数据
  • Python怎么从不同表格中提取数据
    Python怎么从不同表格中提取数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。获取谷歌表格数据访问谷歌表格是这三种方法中最复杂的,因为你需要在使用谷歌表格API前设置一些证...
    99+
    2023-06-16
  • Python中怎么PDF文件提取数据
    这篇文章将为大家详细讲解有关Python中怎么PDF文件提取数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。示例:使用Python从PDF文件中提取一个表格a) 将表复制到Excel并保存...
    99+
    2023-06-16
  • 怎么用python实现读取xlsx表格
    今天小编给大家分享一下怎么用python实现读取xlsx表格的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言快要过年了,现...
    99+
    2023-06-29
  • 怎么用Perl抓取网页和提交表格
    这篇文章主要介绍了怎么用Perl抓取网页和提交表格,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用Perl抓取网页和提交表格这里简单介绍一下用Perl来实现抓好取网页的源代码...
    99+
    2023-06-17
  • Python中怎么使用pdfplumber读取PDF写入Excel
    本篇内容介绍了“Python中怎么使用pdfplumber读取PDF写入Excel”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Pyth...
    99+
    2023-07-02
  • python怎么遍历列表并提取
    Python遍历列表可以使用for循环,然后使用索引或值来提取列表中的元素。下面是几种常见的遍历列表并提取元素的方法: 使用索引...
    99+
    2023-10-26
    python
  • Python读取HTML表格报错怎么解决
    今天小编给大家分享一下Python读取HTML表格报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Python读取...
    99+
    2023-07-02
  • 怎么使用Node.js来读取表格的数据
    这篇文章主要介绍“怎么使用Node.js来读取表格的数据”,在日常操作中,相信很多人在怎么使用Node.js来读取表格的数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Node.js来读取表格的数据...
    99+
    2023-07-05
  • Python中怎么读取电子表格的数据
    今天就跟大家聊聊有关Python中怎么读取电子表格的数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。从电子表格读取 CSVPython 包含了一个 csv 模块,它可读取和写入 C...
    99+
    2023-06-16
  • 使用python怎么提取html文本
    这期内容当中小编将会给大家带来有关使用python怎么提取html文本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。# coding: utf-8from time ...
    99+
    2023-06-15
  • Python中JsonPath提取器和正则提取器怎么使用
    这篇文章主要介绍了Python中JsonPath提取器和正则提取器怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中JsonPath提取器和正则提取器怎么使用文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • HTML5中怎么使用JSON格式提交表单
    本篇内容主要讲解“HTML5中怎么使用JSON格式提交表单”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么使用JSON格式提交表单”吧! 以JS...
    99+
    2022-10-19
  • python怎么用正则表达式提取字符串
    今天小编给大家分享一下python怎么用正则表达式提取字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。用正则表达式提取字...
    99+
    2023-07-05
  • 怎么用Java读取Word包含表格
    本篇文章给大家分享的是有关怎么用Java读取Word包含表格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。本文转载自微信公众号「JAVA日知录」,作者单一色调。转载本文请联系J...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作