python 读取PDF(tabula和pdfminer和pdfplumber的简单操作)

2023-05-16

一、pdfminer 读取PDF
官方文档:http://www.unixuser.org/~euske/python/pdfminer/

这里针对python3
1、模块安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pdfminer3k
2、读取PDF text文本源码

import importlib
import sys
import time

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed


importlib.reload(sys)
time1 = time.time()
text_path = r'E:/YHSSB.pdf'


def parse():
    """
    解析PDF文本,并保存到TXT文件中
    :return:
    """
    fp = open(text_path, 'rb')
    # 用文件对象创建一个PDF文档分析器
    parser = PDFParser(fp)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器,与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始化密码,如果没有密码,就创建一个空的字符串
    doc.initialize()
    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed

    else:
        # 创建PDF,资源管理器,来共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释其对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        # 循环遍历列表,每次处理一个page内容
        # doc.get_pages() 获取page列表
        for page in doc.get_pages():
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象
            # 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等
            # 想要获取文本就获得对象的text属性,
            for x in layout:
                # if (isinstance(x, LTTextBoxHorizontal)):
                with open(r'YHSSB.txt', 'a', encoding='utf-8') as f:
                    try:
                        results = x.get_text()
                        print(results)
                        f.write(results + "\n")
                    except:
                        pass


if __name__ == '__main__':
    parse()
    time2 = time.time()
    print("总共消耗时间为:", time2 - time1)

运行结果:
在这里插入图片描述
对于一些报错没发读取信息,如果是找不相关字体,解决:
https://github.com/euske/pdfminer/tree/2103e5875ef04cfaf424b25d2fd0dc9535a90714/pdfminer/cmap
去下载对于的字体,放入 E:\test\virtualenv\venv3\Lib\site-packages\pdfminer\cmap 放入你的环境中,即可。
在这里插入图片描述
二、tabula读取PDF,转化excel表格等
1、模块安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tabula-py
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

2、安装 java7/8 jdk(具体去Oracle官网下载)
安装教程也在我博客中: https://blog.csdn.net/MZP_man/article/details/96428561

3、 代码演示

# coding=gbk
import tabula


df = tabula.read_pdf(r"E:/YHSSB.pdf")
df_two = tabula.convert_into(r"E:/YHSSB.pdf", r"YHSSB3.xlsx", output_format='xlsx', java_options="-Dfile.encoding=UTF8")


print(df)

for indexs in df.index:
    # 遍历打印企业名称
    print(df.loc[indexs].values[1])

运行结果:
在这里插入图片描述
在这里插入图片描述
具体参数(java_options)的传递,参照:https://github.com/chezou/tabula-py/blob/master/README.md

三、pdfplumber 读取pdf

import pdfplumber
import pandas as pd

path = r'C:/Users/dcg/Desktop/YBNSRZZS.pdf'
with pdfplumber.open(path) as pdf:
    for page in pdf.pages:
        tables = page.extract_tables()  # 获取表格信息
        string = pdf_page.extract_text()  # 获取PDF文本信息
        for table in tables:
            df = pd.DataFrame(table)
            with pd.option_context('display.max_rows', 100, 'display.max_columns', 100):
                print(df)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 读取PDF(tabula和pdfminer和pdfplumber的简单操作) 的相关文章

  • Linux环境(六)--资源与限制

    资源与限制 运行在Linux系统上的程序是有资源限制的 这些也许是硬件引起的限制 例如内存 xff0c 也许由系统策略引起的限制 例如 xff0c 允许 的CPU时间 xff0c 或者是实现的限制 例如 xff0c 整数的尺寸或是文件名允许
  • 遇到了C/C++控制台程序无法输入中文的情况

    其实C C 43 43 控制台程序无法cin中文的情况并不是你使用了string xff0c string是能输入并保存中文的 xff1b 经过一番探究 xff0c 我发现主要的问题是文件的编码和控制台所处的代码页 xff08 控制台的编码
  • Jpg2Dcm中文乱码问题

    Jpg2Dcm中文乱码问题 最近老板提出了一个新的功能要求 xff0c 希望可以把图片转成dcm 在实现功能的问题中遇见了很多问题和掉过许多坑 于是在此记录下来 问题 xff1a 第一次在进行Jpg2Dcm时 xff0c 可以进行图片转dc
  • 神经网络的数学表达式,神经网络的数学理论

    什么是神经网络 神经网络可以指向两种 xff0c 一个是生物神经网络 xff0c 一个是人工神经网络 生物神经网络 xff1a 一般指生物的大脑神经元 xff0c 细胞 xff0c 触点等组成的网络 xff0c 用于产生生物的意识 xff0
  • python装饰器详解(四)---把参数传递给装饰器

    因为装饰器必须接收一个函数当做参数 所以 不可以直接把被装饰函数的参数传递给装饰器 装饰器就是一个普通的函数 xff0c 回顾 def my decorator func print 34 I am an ordinary function
  • Motion Deblurring图像运动去模糊代码

    http www di ens fr whyte Efficient Deblurring for Shaken and Partially Saturated Images http www di ens fr willow resear
  • maven执行install时报错 The packaging for this project did not assign a file to the build artifact

    问题描述 maven中执行plugins下面的install install时会报如下错误 span class token class name Failed span span class token keyword to span s
  • realsense相机两种获取相机内外参的方式

    https www it610 com article 1296417297711308800 htm 命令 xff1a rs sensor control 这个命令是一个exe文件 xff0c 可以去 C Program Files x8
  • wget设置代理

    1 在bash shell中设定代理 basrhc export http proxy 61 34 166 111 53A 167 3128 34 export ftp proxy 61 34 166 111 53A 167 3128 34
  • chown,chgrp,chmod,u+s,g+s,o+t

    chown user file directory change owner 将后面的目标文件或者目录的所有者替换成 user chgrp group file directory change group 将目标文件或者目录的所有组替换成
  • Segment Routing笔记(一)

    SR 理论 一 MPLS TE缺点 RSVP TE大部分都是为了FRR的目的不支持ECMP所有流量都需要在隧道里诞生了 战术型 TE xff0c 只在需要的时候使用 术语 TI LFA 与拓扑无关的无环路备份 xff0c 能保证备份路径的最
  • Springboot+Netty搭建UDP服务端

    UDP是一个无连接协议 xff0c 应用范围很大 xff0c 对于一些低功耗的设备可以使用UDP方式向云端推送消息信息 xff0c 也可以在推送消息时收到从云端原路返回的消息 xff0c 使用Netty 43 SpringBoot方式可以快
  • Springboot+Netty搭建UDP客户端

    使用Netty 43 SpringBoot方式可以快速地开发一套基于UDP协议的服务端程序 xff0c 同样的也可以开发客户端 xff0c 一般使用UDP都是使用原生的方式 xff0c 发送消息后就不管不问 xff0c 也就是不需要确定消息
  • Springboot+Netty搭建MQTT协议的服务端(基础Demo)

    Netty是业界最流行的nio框架之一 xff0c 结合springboot可以满足快速开发 MQTT xff08 Message Queuing Telemetry Transport xff0c 消息队列遥测传输协议 xff09 xff
  • SpringBoot+Shiro+Jwt+Vue+elementUI实现前后端分离单体系统Demo

    记录一下使用SpringBoot集成Shiro框架和Jwt框架实现前后端分离Web项目的过程 xff0c 后端使用SpringBoot整合Shiro 43 Jwt auth0 xff0c 前端使用vue 43 elementUI框架 xff
  • Centos系统安装RabbitMQ消息中间件

    记录一下在centos7 x下面安装RabbitMQ消息中间件 RabbitMQ是一个开源而且遵循 AMQP协议实现的基于 Erlang语言编写 xff0c 因此安装RabbitMQ之前是需要部署安装Erlang环境的 先安装Erlang
  • SpringBoot+RXTXcomm实现Java串口通信 读取串口数据以及发送数据

    记录一下使用SpringBoot 43 RXTXcomm实现Java串口通信 xff0c 使用Java语言开发串口 xff0c 对串口进行读写操作 RXTXcomm jar这个包支持的系统较多 xff0c 但是更新太慢 xff0c 在win
  • Springboot+Netty搭建TCP服务端

    Netty是业界最流行的nio框架之一 xff0c 它具有功能强大 性能优异 可定制性和可扩展性的优点 Netty的优点 xff1a 1 API使用简单 xff0c 开发入门门槛低 2 功能十分强大 xff0c 预置多种编码解码功能 xff
  • Springboot+Netty搭建TCP客户端-多客户端

    之前搭建了一个Springboot 43 Netty服务端的应用 xff0c 既然有服务端 xff0c 自然也有客户端的应用 xff0c 现在搭建一个Springboot 43 Netty客户端的应用Demo程序 xff0c 多客户端方式
  • 机器学习中的凸和非凸优化问题

    题目 xff08 145 xff09 xff1a 机器学习中的优化问题 xff0c 哪些是凸优化问题 xff0c 哪些是非凸优化问题 xff1f 请各举一个例子 凸优化定义 凸优化问题 非凸优化问题 凸优化定义 xff1a 公式 geome

随机推荐

  • VMware workstation中rhel安装VMware tools失败

    切换登录用户为root即可 转载于 https www cnblogs com dazzleC p 10555809 html
  • Uniform convergence may be unable to explain generalization in deep learning

    本文价值 xff1a understand the limitations of u c based bounds cast doubt on the power of u c bounds to fully explain general
  • 调参之learning rate

    The learning rate is perhaps the most important hyperparameter If you have time to tune only one hyperparameter tune the
  • 调超参(lr,regularization parameter)经验整理

    Learning rate 最优值从1e 4到1e 1的数量级都碰到过 xff0c 原则大概是越简单的模型的learning rate可以越大一些 https blog csdn net weixin 44070747 article de
  • Dropout network, DropConnect network

    Notations input v v v output r r r weight parameter
  • Curriculum adversarial training

    Weakness of adversarial training overfit to the attack in use and hence does not generalize to test data Curriculum adve
  • Python处理中文语言——读取中文

    本文解决问题 xff1a 1 导入中文txt文本 xff0c 并转换为unicode 2 导入包含中文的py file 解决问题一 xff1a 导入中文txt文本 xff0c 并转换为unicode 基础概念 xff1a 1 unicode
  • C# WPF开源控件库HandyControl用法举例

    目录 概述 MessageBox用法举例 Button用法举例 Lable用法举例 Slider用法举例 TextBox用法举例 组合框ComboBox用法举例 源码下载 概述 HandyControl是一款免费开源的WPF控件库 xff0
  • python 等差数列生成器

    典型的迭代器模式作用很简单 遍历数据结构 不过 xff0c 即便不是从集合中获取元素 xff0c 而 是获取序列中即时生成的下一个值时 xff0c 也用得到这种基于方法的标准接口 例如 xff0c 内置的 range 函数用于生成有穷整数等
  • python 终止协程和异常处理

    协程中未处理的异常会向上冒泡 xff0c 传给 next 函数或 send 方法的调用方 xff08 即触发协程的对 象 xff09 下面示例举例说明如何使用之前博客示例中由装饰器定义的 averager 协程 未处理的异常会导致协程终止
  • centos7 下安装 nodejs

    源码包安装 下载安装包到 xff1a usr local 目录下 1 命令下载 wget https span class token punctuation span span class token operator span node
  • Ubuntu配置apt软件源

    清华大学开源镜像网站 xff08 帮助页面 xff09 https mirrors tuna tsinghua edu cn help AOSP 阿里云开源镜像网站 https opsx alibaba com mirror 网易开源镜像网
  • python3 fnmatch和fnmatchcase

    你想使用 Unix Shell 中常用的通配符 比如 py Dat 0 9 csv 等 去匹配文本字符串 xff0c fnmatch 模块提供了两个函数 fnmatch 和 fnmatchcase xff0c 可以用来实现这样的匹配 用法如
  • python unicodedata 处理Unicode 字符串

    你正在处理 Unicode 字符串 xff0c 需要确保所有字符串在底层有相同的表示 span class token comment coding utf 8 span span class token comment 你正在处理 Uni
  • python 插入排序

    问题 xff1a 数组排序 插入排序 xff0c 向已经有序一组序列中 xff0c 插入一个新的元素 默认第一个列表元素为已经排序好的元素 xff0c 从第二个元素进行比较 xff0c 已经排序好的元素 xff0c 重大到小 xff0c 依
  • 分治策略-归并排序

    问题 xff1a 数组排序 分治策略 归并排序 xff1a 1 是合并这些子问题的解 2 分解原问题 xff0c 递归求解 span class token comment coding utf 8 span span class toke
  • 求股票最大收益问题

    问题 xff1a 求股票最大收益 xff0c 股票每天的价格 xff1a 100 113 110 85 105 102 86 63 81 101 94 106 101 79 94 90 97 买进和卖出都在当天结束后进行 xff0c 在某一
  • Python pip 包的安装和卸载 使用。

    Python pip 包的安装和卸载 使用 xff08 一 xff09 pip 安装 一般 来说 Python 需要什么包 直接 pip install 包 即可 但是 这种方法太慢 因为他通过美国的服务器下载 提高 pip 速度 这里提供
  • jdk1.8安装和环境变量配置

    一 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 第一次是安装 jdk xff0c 第二次是安装 jre 建议两个都安装在同一个java文件夹中的不同文件夹中 xff08 不能都安装在java文件夹的根目录下 xff0c jdk
  • python 读取PDF(tabula和pdfminer和pdfplumber的简单操作)

    一 pdfminer 读取PDF 官方文档 xff1a http www unixuser org euske python pdfminer 这里针对python3 1 模块安装 xff1a pip install i https pyp