当前位置: 首页 > news >正文

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)

相关文章:

  • 在本地模拟C/S,Socket套接字的使用
  • ChatGPT专业术语及有效使用方法概述
  • 城市群(Megalopolis)/城际(inter-city)OD相关研究即Open Access数据集调研
  • java面试--线程总结
  • openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户
  • Powershell脚本自动备份dhcp数据库
  • 【爬虫】python打包可执行程序(ui界面制作完成后)
  • Maven第三章:IDEA集成与常见问题
  • Jmeter性能测试:高并发分布式性能测试
  • Rust所有权
  • Linux UWB Stack实现——FiRa会话状态机
  • Linux下导出dump文件(Oracle和PG数据)
  • Python第三方库安装——使用vscode、pycharm安装Python第三方库
  • C语言 位操作符 >> << | ^
  • 0基础学习PyFlink——用户自定义函数之UDTAF
  • #Java异常处理
  • 03Go 类型总结
  • co模块的前端实现
  • C学习-枚举(九)
  • JavaScript服务器推送技术之 WebSocket
  • JS+CSS实现数字滚动
  • MySQL几个简单SQL的优化
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python学习之路13-记分
  • 从零搭建Koa2 Server
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 简单易用的leetcode开发测试工具(npm)
  • 爬虫模拟登陆 SegmentFault
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 线上 python http server profile 实践
  • mysql面试题分组并合并列
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​如何在iOS手机上查看应用日志
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $(selector).each()和$.each()的区别
  • (1)SpringCloud 整合Python
  • (2)Java 简介
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)hibernate配置管理
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计ssm电影分享网站
  • (利用IDEA+Maven)定制属于自己的jar包
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (算法)Travel Information Center
  • (推荐)叮当——中文语音对话机器人
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)ABI是什么
  • (转载)从 Java 代码到 Java 堆
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .Family_物联网
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献