python实现PDF表格与文本分别导出EXCEL

现需将pdf 转换至Excel ,
目前实现方式:将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中
1)、识别PDF中的表格块
2)、将PDF转换为Word格式
3)、提取Word中非表格的文本数据
4)、对文本与表格重复的行进行去重
5)、合并导出至Excel不同sheet页中

# coding=UTF8
import datetime
from docx import Document
from pdf2docx import Converter
import pandas as pd
import numpy as np
import pdfplumber
import os
import fitz# TODO 输出PDF表格数据至Excel
def extractTables(filepath):with pdfplumber.open(filepath) as pdf:tables = []for i in range(0, len(pdf.pages)):page = pdf.pages[i]tables.append(page.extract_tables())df = pd.DataFrame()df_seperation = pd.DataFrame([np.nan, np.nan])  # 创建空白的,用于充当分隔行for i in range(0, len(tables)):tabular = tables[i]  # 选取第i页的表格if len(tabular) > 0:  # 如果该页存在表格的话for j in range(0, len(tabular)):  # j  表示第几个表格df_temp = pd.DataFrame(tabular[j])df = pd.concat([df, df_seperation, df_temp])  # 更新总表格return df# TODO pdf 转Word
def extractWord(pdffilepath, wordfilepath):cv = Converter(pdffilepath)cv.convert(wordfilepath)cv.close()# TODO 获取非表格内容
def getDocLines(wordfilepath):doc = Document(wordfilepath)paragraphs = doc.paragraphslines = []for paragraph in paragraphs:line = paragraph.text.strip()if not line:continuelines.append(line)# aspose用的体验板,带有页眉# lines = lines[100:]# print(lines)df = pd.DataFrame(lines)return df# TODO 删除与table重复的行数据
def txt(tabledf, txtdf):lines = []for line in tabledf[0]:lines.append(str(line))# 获取txt与Excel重复的数据repeat_txt = []for line in lines:for txt in txtdf[0]:if line.find(txt) != -1:repeat_txt.append(txt)txtdf = txtdf.drop(txtdf[txtdf[0] == txt].index)return txtdfif __name__ == '__main__':filepath = 'D:\develop_python\Python_Demo\PDF_TO_EXCEL\YM2021\\'outpath = 'D:\develop_python\Python_Demo\PDF_TO_EXCEL\YM2021\\'pdffile = '南通-2.21'pdffilepath = filepath + str(pdffile) + '.pdf'excelfilepath = filepath + str(pdffile) + '.xlsx'wordfilepath = filepath + str(pdffile) + '.docx'# 获取PDF表格数据try:starttime = datetime.datetime.now()print('执行开始', starttime)if not os.path.exists(outpath):os.makedirs(outpath)print()print('正在读取表格数据........')tabledf = extractTables(pdffilepath)print('表格数据读取完成........')print()print('正在转换Word......')extractWord(pdffilepath, wordfilepath)print('Word转换完成......')print()print('正在解析非表格文本数据......')txtdf = getDocLines(wordfilepath)# 删除与table重复的行数据df = txt(tabledf, txtdf)print('非表格数据解析完成......')print()print('正在输出Excel文件......')writer = pd.ExcelWriter(excelfilepath)tabledf.to_excel(writer, sheet_name='EXCEL', index=False)# txtdf.to_excel(writer, sheet_name='txt', index=False)df.to_excel(writer, sheet_name='txt', index=False)writer.save()print('Excel文件输出成功......')print()endtime = datetime.datetime.now()print('执行结束', endtime)print('耗时', endtime - starttime)except Exception  as e:print(Exception, e.args)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 实现侧边栏滑出菜单效果

1.效果图 2.实现原理 这里做了两个widget,一个是 展示底图widget,一个是 展示动画widget。 这两个widget需要重合。动画widget需要设置属性叠加到底图widget上面,设置如下属性: setWindowFlags(Qt::FramelessWindowHint | Qt::…

Java提升技术,进阶为高级开发和架构师的路线

原文网址:Java提升技术,进阶为高级开发和架构师的路线-CSDN博客 简介 Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。 首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是&…

【Docker】Docker-Compose内置DNS负载均衡失效问题

Docker Compose实现负载均衡 还是对前面的例子docker-compose.yml稍微修改: version: "3.8"services:flask-demo:build:context: .dockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOSTredis-server- REDIS_PASS${REDIS_PASS}healt…

软考-入侵检测技术原理与应用

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 入侵检测技术概念 入侵检测技术是指一种计算机安全技术,旨在监测计算机系统、…

回溯法:雀魂启动!

题目链接:雀魂启动!_牛客题霸_牛客网 题解: 回溯法 1、用哈希思想构建映射表,标记已有的卡的种类和个数 2、遍历卡池,先从卡池中抽一张卡,因为只能抽一张卡,所以一种卡只判断一次 3、抽到卡后找…

行为型模式-状态模式

在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图:允许对象在内部状态发生改变时改变它的行为&#xff0…

jmeter报Java.NET.BindException: Address already in use: connect

1、windows10和window11上: 修改注册表的内容: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters: 新建dword(值)的类型: MaxUserPort 65334 TcpTimedWaitDelay 30window

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.b…

Chimera:混合的 RLWE-FHE 方案

参考文献: [HS14] S. Halevi and V. Shoup. Algorithms in HElib. In Advances in Cryptology–CRYPTO 2014, pages 554–571. Springer, 2014.[HS15] S. Halevi and V. Shoup. Bootstrapping for HElib. In Advances in Cryptology–EUROCRYPT 2015, pages 641–6…

K8s概念汇总-笔记

目录 1.Master 1.1在Master上运⾏着以下关键进程 2.什么是Node? 1.2在每个Node上都运⾏着以下关键进程 3.什么是 Pod ? 4. 什么是Label ? 5.Replication Controller 6.Deployment 6.1Deployment的典型场景: 7.Horizontal Pod Autoscaler TODO…

【MATLAB源码-第57期】基于matlab的IS95前向链路仿真,输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 IS-95,也被称为cdmaOne,是第一代的CDMA(Code Division Multiple Access,码分多址)数字蜂窝通信标准。IS-95的全称是Interim Standard-95,最初由Qualcomm…

春运压力如何破?V2X技术来解题

近日,国务院发布了2024春节放假方案。春节作为每年中国交通运输系统最繁忙的时期,车流的快速增长带来了道路运载压力和事故风险率。如果想拥有一个不堵车又平安的春节?那就不得不提V2X 技术,以及它在提升交通安全与交通效率、助力…

自定义一个注解,用它标记的执行并于给定值做对比(即简单的junit)

目录 程序设计 程序分析 系列文章 程序设计 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME) @Target(ElementT…

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集(Actual Road dense image Dataset, ARD),通过专业的能见度计和多人标注,获得…

10个Golang 数据库最佳实践

如果您使用 Golang 开发数据库支持的应用程序,则应遵循一些最佳实践,以确保您的代码干净、高效且可靠。 在本文中,我们将探讨在 Golang 中使用数据库的 10 种最佳实践。我们将涵盖连接数据库、CRUD 操作以及使用准备好的语句等主题。在本文结…

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解(骨干网络基于VGG16)

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解(骨干网络基于VGG16) 背景介绍2、 网络结构详解2.1 LarFOV效果分析 2.2 DeepLab v1-LargeFOV 模型架构2.3 MSc(Multi-Scale,多尺度(预测))2.3 以VGG16为特…

1-多媒体通信概述

文章目录 媒体和多媒体媒体多媒体VarityIntergrationInteraction 多媒体通信(MMC)业务类型 MMC主要问题和关键技术主要问题关键技术 MMC发展动向重要事件趋势 标准化组织 媒体和多媒体 媒体 承载信息的载体. 感知媒体, 表示媒体, 显示媒体, 存储媒体, 传输媒体. 多媒体 Var…

电脑定时关机

电脑定时关机 1.右键 管理 2. 3. 4. 5. shutdown.exe/s /f /t 06.点击完成就好了 7.这里面可以 看到定时任务和启动 右键有运行 结束 禁用

世微 宽电压降压 DC-DC 电源管理芯片 以太网平衡车工业控制电源驱动12V6A AP8854

1,产品描述 AP8854 一款宽电压范围降压型 DC-D 电源管理芯片,内部集成使能开关控制、基 准电源、误差放大器、过热保护、限流保 护、短路保护等功能,非常适合宽电压输 入降压使用。 AP8854 带使能控制,可以大大节省外 围器件&…

广州华锐互动:VR虚拟现实物理学习平台,开启数字化教学新格局

随着虚拟现实(VR)技术的不断发展,越来越多的领域开始应用这一技术。广州华锐互动开发的VR虚拟现实物理学习平台就得到了广泛应用,平台涉及力学、光学、热学等初中物理知识,还包含了物理名人、实验器具、物理现象的还原和学习,相比…