精华内容
下载资源
问答
  • python3.7 要求:提取pdf中表格里面的内容,提取每一个单元格的内容,并且精确。 尝试了3种,每种都需要安装不同的module。

    python3.7

    要求:提取pdf中表格里面的内容,提取每一个单元格中的内容,并且精确。

    尝试了4种,每种都需要安装不同的module。代码不多,效果自己运行下试下吧(内容不便)

    非图片型表格!!

    推荐最后一种!!!

     

    第一种

    pip3 install pdfminer   # 20191125

    pip3 install pdfminer.six  # 20201018

    from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
    from pdfminer.pdfpage import PDFPage
    from pdfminer.converter import TextConverter
    from pdfminer.layout import LAParams
    
    
    # 识别第一版
    
    
    def pdfTotxt(filepath,outpath):
        try:
            fp = open(filepath, 'rb')
            outfp=open(outpath,'w')
            #创建一个PDF资源管理器对象来存储共享资源,caching = False不缓存
            rsrcmgr = PDFResourceManager(caching = False)
            # 创建一个PDF设备对象
            laparams = LAParams()
            device = TextConverter(rsrcmgr, outfp, codec='utf-8', laparams=laparams,imagewriter=None)
            #创建一个PDF解析器对象
            interpreter = PDFPageInterpreter(rsrcmgr, device)
            for page in PDFPage.get_pages(fp, pagenos = set(),maxpages=0,
                                          password='',caching=False, check_extractable=True):
                page.rotate = page.rotate % 360
                interpreter.process_page(page)
            #关闭输入流
            fp.close()
            #关闭输出流
            device.close()
            outfp.flush()
            outfp.close()
        except Exception as e:
             print("Exception:%s",e)
    
    
    if __name__ == "__main__":
        pdfTotxt("D:\\OCR1234531603788106340.pdf", "d:\\aa.txt")

    识别效果还ok,不管是表格还是非表格内容,但是非表格内容时,不知道为什么会多出一些内容。

     

    第二种

    需要安装的module 同一种

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    
    from pdfminer.pdfinterp import PDFPageInterpreter
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import TextConverter, PDFPageAggregator
    from pdfminer.layout import LAParams
    from pdfminer.pdfdevice import PDFDevice
    from pdfminer.pdfparser import PDFParser
    from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfpage import PDFPage
    
    import traceback
    
    # ############# 比第一版好些,不会有多余的文字
    
    
    def pdfTotxt(filepath,outpath):
        try:
            fp = open(filepath, "rb")
            # 创建一个与文档关联的解释器
            parser = PDFParser(fp)
    
            # PDf文档的对象
            doc = PDFDocument(parser)
    
            # 链接解释器和文档对象
            parser.set_document(doc)
            # doc.set_parser(parser)
    
            # doc.initialize("")
    
            # 创建PDF资源管理器
            resource = PDFResourceManager()
    
            # 参数分析器
            laparam = LAParams()
    
            # 创建一个聚合器
            device = PDFPageAggregator(resource, laparams=laparam)
    
            # 创建PDF页面解释器
            interpreter = PDFPageInterpreter(resource, device)
    
            # 使用文档对象得到页面的集合
            for page in PDFPage.create_pages(doc):
                # 使用页面解释器来读取
                interpreter.process_page(page)
    
                # 使用聚合器来获得内容
                layout = device.get_result()
    
                for out in layout:
                    if hasattr(out, 'get_text'):  # 需要注意的是在PDF文档中不只有 text 还可能有图片等等,为了确保不出错先判断对象是否具有 get_text()方法 完整的代码
                        print(out.get_text())
        except Exception as e:
             print("Exception:%s",traceback.format_exc())
    
    
    if __name__ == "__main__":
        # pdfTotxt("D:\\OCR1234531603788106340.pdf", "d:\\aa3.txt")
        pdfTotxt("D:\\5128551921af413ab1d2f10e21fb1da0158239.pdf", "d:\\aa7.txt")

    效果:和第一种差不多,效果可能稍微好点

     

    第三种

    pip3 install tabula

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    
    import tabula
    
    import traceback
    
    # #############  可以正确提取内容,但是会有些列的单元格提取错乱。
    
    
    def pdfTotxt(filepath,outpath):
        try:
            df = tabula.read_pdf(filepath, encoding='gbk',
                                 pages='all')
    
            for df_li in df:
                for ind, column in enumerate(df_li.columns):
                    print(column.replace("\r", ""))
                for index in range(df_li.index.size):
                    for ind, column in enumerate(df_li.columns):
                        print(str(df_li[column][index]).replace("\r", ""), end="")
    
                print("\r\n")
    
            # for df_li in df:
            #     dict = df_li.to_dict()
            #     print(" --------------------------- ")
            #     for key, value in dict.items():
            #         print(key.replace("\r", "") + ' ======== ')
            #         for ind, val in enumerate(value):
            #             print(str(val).replace("\r", ""))
            # print(df)
    
    
            # print(df[0].columns)
            #
            # print('---------------')
            # print(df[0].values)
    
            # for index, col in enumerate(df[0].columns):
            #     print( '-------------------')
            #     for index2, cell in enumerate(df[0].values):
            #         # print(df[0][col][cell])
            #         print(df[0].loc[index].values[index2].strip())
    
        except Exception as e:
             print("Exception:%s",traceback.format_exc())
    
    
    if __name__ == "__main__":
        pdfTotxt("D:\\5128551921af413ab1d2f10e21fb1da0158239.pdf", "d:\\aa3.txt")

    效果:相比前面两种,返回的是dataframe,前面的可能有的文字乱码。但是这个缺点是,如果有合并的单元格,则有些列的识别会错乱。

     

    第四种

    pip3 install PyPDF2  # 1.26.0

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    
    import PyPDF2
    
    import traceback
    
    # #############  比其余的pdf单元格内容提取更完善,并且针对合并单元格兼容好,提取单元格时也不会错乱
    
    
    def pdfTotxt(filepath,outpath):
        try:
            import pdfplumber
            with pdfplumber.open(filepath)  as pdf:
                page_ind = 1
                for page in pdf.pages:
                # page = pdf.pages[1]  # 设置操作页面
                    tables = page.extract_tables()
                    if len(tables) <= 0:
                        continue
                    print(" 第 " + str(page_ind) + " 行: " + str(len(tables[0])))
                    page_ind += 1
                    # for row in page.extract_tables():
                    #     print(row)
                    #     print(row[0])  # 打印外层列表第一个元素
    
        except Exception as e:
             print("Exception:%s",traceback.format_exc())
    
    
    if __name__ == "__main__":
        pdfTotxt("D:\\5128551921af413ab1d2f10e21fb1da0158239.pdf", "d:\\aa3.txt")

    效果:个人要求,这种效果最好。单元格也不会错乱。直接根据行+列提取就好。

    展开全文
  • Python提取PDF中表格数据

    千次阅读 2019-10-10 08:33:18
    PDF 表格中获取数据是一项痛苦的工作。不久前,一位开发者提供了一个名为 Camelot 的工具,使用三行代码就能从 PDF 文件中提取表格数据。 项目地址:https://github.com/camelot-dev/camelot 项目作者提供了...

    从 PDF 表格中获取数据是一项痛苦的工作。不久前,一位开发者提供了一个名为 Camelot 的工具,使用三行代码就能从 PDF 文件中提取表格数据。

    项目地址:https://github.com/camelot-dev/camelot

     

    项目作者提供了三种安装方法。首先,你可以使用 Conda 进行安装,这是最简单的。

    conda install -c conda-forge camelot-py

    最流行的安装方法是使用 pip 安装。

    pip install camelot-py[cv]

    还可以从项目中克隆代码,并使用源码安装。

    git clone https://www.github.com/camelot-dev/camelot
    cd camelot
    pip install ".[cv]"

    我选择用pip安装包,装好包后就来读取PDF文件了

    import camelot
    tables = camelot.read_pdf('1.pdf')

    然后就报错了。。

    然后安装ghostscript

    依然报错

    最后在这个贴子上了解决方法https://github.com/atlanhq/camelot/issues/282 

    需要在ghostscript官网下载exe文件安装,下载地址:https://www.ghostscript.com/download/gsdnld.html

    安装后就不报错了

     

     

    接着读取pdf,发现读取的表是空的,就去阅读了一下说明,发现如果不设置页面,默认读取第一页

    然后找到PDF中表格对应的页面,再执行代码

    效果还不错,然后我试了下另外一个PDF文档,又出现了问题。。 表格又是空的

    对比了两个文档,发现pdf1中选中页中有两个表格,且是三线表,而pdf2中只有一个表格,还是传统的表格。在pdf1中发现有一页只有一个三线表,就试了下那一页,发现仍然不能读取,那么问题应该就是camelot只能读取表格中的数据,读取不了三线表中的数据。

    如果想把读取表格中的数据保存下来,可以参考如下代码

    >>> tables[0].df # get a pandas DataFrame!
    >>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html, sqlite,可指定输出格式
    >>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_sqlite, 导出数据为文件
    >>> tables
    <TableList n=1>
    >>> tables[0]
    <Table shape=(7, 7)> # 获得输出的格式
    >>> tables[0].parsing_report
    {
        'accuracy': 99.02,
        'whitespace': 12.24,
        'order': 1,
        'page': 1
    }

     

    展开全文
  • 在实际研究,我们经常需要获取大量数据,而这些数据很大一...Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格。因...

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取。那么如何才能高效提取出pdf文件中的表格数据呢?

    Python提供了许多可用于pdf表格识别的库,如camelot、tabula、pdfplumber等。综合来看,pdfplumber库的性能较佳,能提取出完整、且相对规范的表格。因此,本推文也主要介绍pdfplumber库在pdf表格提取中的作用。

    作为一个强大的pdf文件解析工具,pdfplumber库可迅速将pdf文档转换为易于处理的txt文档,并输出pdf文档的字符、页面、页码等信息,还可进行页面可视化操作。使用pdfplumber库前需先安装,即在cmd命令行中输入:

    pip install pdfplumber

    pdfplumber库提供了两种pdf表格提取函数,分别为.extract_tables( )及.extract_table( ),两种函数提取结果存在差异。为进行演示,我们网站上下载了一份短期融资券主体信用评级报告,为pdf格式。任意选取某一表格,其界面如下:

    Python骚操作,提取pdf文件中的表格数据!

    关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货

    每天晚上20:00都会开直播给大家分享python学习知识和路线方法,群里会不定期更新最新的教程和学习方法,大家都是学习python的,或是转行,或是大学生,还有工作中想提升自己能力的,如果你是正在学习python的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实

    接下来,我们简要分析两种提取模式下的结果差异。

    (1).extract_tables( )

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

    Python骚操作,提取pdf文件中的表格数据!

    输出结果:

    Python骚操作,提取pdf文件中的表格数据!

    (2).extract_table( )

    返回多个独立列表,其结构层次为row→cell。若页面中存在多个行数相同的表格,则默认输出顶部表格;否则,仅输出行数最多的一个表格。此时,表格的每一行都作为一个单独的列表,列表中每个元素即为原表格的各个单元格内容。若需输出某个元素,得到的便是具体的数值或字符串。如下:

    Python骚操作,提取pdf文件中的表格数据!

    输出结果:

    Python骚操作,提取pdf文件中的表格数据!

    在此基础上,我们详细介绍如何从pdf文件中提取表格数据。其中一种思路便是将提取出的列表视为一个字符串,结合Python的正则表达式re模块进行字符串处理后,将其保存为以标准英文逗号分隔、可被Excel识别的csv格式文件,即进行如下操作:

    Python骚操作,提取pdf文件中的表格数据!

    输出结果:

    Python骚操作,提取pdf文件中的表格数据!

    尽管能获得完整的表格数据,但这种方法相对不易理解,且在处理结构不规则的表格时容易出错。由于通过pdfplumber库提取出的表格数据为整齐的列表结构,且含有数字、字符串等数据类型。因此,我们可调用pandas库下的DataFrame( )函数,将列表转换为可直接输出至Excel的DataFrame数据结构。DataFrame的基本构造函数如下:

    DataFrame([data,index, columns])

    三个参数data、index和columns分别代表创建对象、行索引和列索引。DataFrame类型可由二维ndarray对象、列表、字典、元组等创建。本推文中的data即指整个pdf表格,提取程序如下:

    Python骚操作,提取pdf文件中的表格数据!

    其中,table[1:]表示选定整个表格进行DataFrame对象创建,columns=table[0]表示将表格第一行元素作为列变量名,且不创建行索引。输出Excel表格如下:

    Python骚操作,提取pdf文件中的表格数据!

    通过以上简单程序,我们便提取出了完整的pdf表格。但需注意的是,面对不规则的表格数据提取,创建DataFrame对象的方法依然可能出错,在实际操作中还需进行核对。

    展开全文
  • Till now I could achieve extracting jpgs using startmark = b"\xff\xd8" and endmark = b"\xff\xd9", but not all tables and graphs in a PDF are plain jpgs, hence my code fails badly in achieving that....

    Searched quite a bit but as I couldn't find a solution for this kind of problem, hence posting a clear question on the same. Most answers cover image/text extraction which are comparatively easier.

    I've a requirement of extracting tables and graphs as text (csv) and images respectively from PDFs.

    Can anyone help me with an efficient python 3.6 code to solve the same?

    Till now I could achieve extracting jpgs using startmark = b"\xff\xd8" and endmark = b"\xff\xd9", but not all tables and graphs in a PDF are plain jpgs, hence my code fails badly in achieving that.

    Example, I want to extract table from page 11 and graphs from page 12 as image or something which is feasible from the below given link. How to go about it?

    解决方案

    For extracting tables you can use camelot

    Here is an article about it.

    展开全文
  • 使用 Python 的 Camelot 包来自动化解析 PDF 的有线框和无线框表格,代码简洁高效,而且可以把数据保存到 Excel、CSV 等文件,便于对数据进行对比分析,极大地提高了数据处理的效率。   【课程设计大纲】
  • python 读取pdf文件有3个扩展包 pdfminer3k(python2中为pdfminer)、fitz和pymupdf1.pdfminer3k读取并获得pdf文档的信息:from pdfminer.pdfparser import PDFParser,PDFDocumentfrom pdfminer.pdfinterp import ...
  • python提取PDF表格内容保存到excel

    万次阅读 2018-10-06 13:10:24
    pythonPDF提取表格
  • # 获取当前页面的全部文本信息,包括表格中的文字 # print(page.extract_text()) for table in page.extract_tables(): # print(table) for row in table: print(row) for j in range(len(row)): sheet....
  • 由于(质量优质)PDF较好的阅读性,工作当中难免有文件使用PDF格式保存和流通的。但是由于PDF过于追求视觉的享受,所以在编辑其内容元素上相较微软office系列的确困难。...所以借用Python超大的模块库当中的pdfplumbe...
  • 今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样:python读取PDF无非就是三种方式(我所了解的),pdfminer、pdf2htmlEX 和 Tabula。综合考虑后,选择了最后一种。下面对三种方式分别介绍:pdf...
  • PythonPDF中提取表格

    2020-01-04 17:52:54
    使用Python的pdfplumber模块从PDF指定的各个页面中提取对应的表格,全部存入pandas的DataFrame中。将表格中不关注的行列删除后,保存到Excel电子表格中。 源码将STM32规格书中指定封装的引脚表提取到Excel中,方便...
  • 如题使用python提取PDF里面的表格,使用pdfplumber提取,使用extract_text()可以提取表格里的内容,但使用extract_table提取,却提取不到内容,print空none 文件是...pdf 各位可以下载试试,注意:从第8页开始有大量...
  • Python应用实战代码-如何使用python提取pdf表格及文本,并保存到excel
  • 提取pdf文件的表格数据到excel文件 视频演示: Pythonpdf表格转换为excel表格 界面: 轮子 文件大小 pdfplumber 核心code: def extract_table(pdf_file): fn = pdf_file[pdf_file....
  • from PyPDF2 import PdfFileReader, PdfFileWriter directory = "111.pdf" f = open(directory, 'rb') reader = PdfFileReader(f) contents = reader.getPage(0).extractText() f.close() print(contents)
  • 提取PDF文件表格数据是一个很常见的需求,为此我们经常付费,其实实现起来比较容易 这里使用camelot提取数据 import camelot tables = camelot.read_pdf(pdf_filepath, pages='1-end') for item in tables: df...
  • python提取pdf文件表格

    千次阅读 2019-10-24 18:37:51
    在做pdf文字抽取时,pdfplumber会与pdfminer3k有版本冲突,而且接口的封装性、抽取效果也没有pdfplumber好,所以强烈建议使用pdfplumber,抛弃pdfminer3k。 1、工具 pdfplumber pip install pdfplumber 2、调用...
  • Python使用Tabula提取PDF表格数据.pdf
  • PDF 表格中获取数据是一项痛苦的工作。不久前,一位开发者提供了一个名为 Camelot 的工具,使用三行代码就能从 PDF 文件中提取表格数据。PDF 文件是一种非常常用的文件格式,通常用于正式的电子版文件。它能够很...
  • 下载了好多PDF文件,大量的数据在里面,需要提取里面表格。于是乎! 找了一个Python的包,叫做camelot (https://github.com/socialcopsdev/camelot),进行表格提取。强大!! import camelot table=camelot....
  • 这几天想统计一下《中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告》的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python表格转成Excel格式。 看过别人写的博客,...
  • 利用python实现pdf表格提取 1.项目背景 前不久,小编接到一个小项目,客户要求如下: 1) 给定一个含有表格信息的pdf文件,将pdf里面的表格提取出来,并保存成xlsx格式。 直接上代码: print(“等会上代码”) ...
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有...提取PDF文件表格文字,保存为Excel文件,PDF每个表格的文本写入Excel文件的一个工作表。 操作步骤: 1、创建Word文件,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,498
精华内容 1,799
关键字:

python提取pdf中的表格

python 订阅