seo优化工具使用教程,东莞网站快速排名优化,优设网网站,网站开发 百度云现需将pdf 转换至Excel #xff0c; 目前实现方式#xff1a;将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中 1#xff09;、识别PDF中的表格块 2#xff09;、将PDF转换为Word格式 3#xff09;、提取Word中非表格的文本数据 4#xff09;、对文本与表格重…现需将pdf 转换至Excel 目前实现方式将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中 1、识别PDF中的表格块 2、将PDF转换为Word格式 3、提取Word中非表格的文本数据 4、对文本与表格重复的行进行去重 5、合并导出至Excel不同sheet页中
# codingUTF8
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.21pdffilepath filepath str(pdffile) .pdfexcelfilepath filepath str(pdffile) .xlsxwordfilepath 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_nameEXCEL, indexFalse)# txtdf.to_excel(writer, sheet_nametxt, indexFalse)df.to_excel(writer, sheet_nametxt, indexFalse)writer.save()print(Excel文件输出成功......)print()endtime datetime.datetime.now()print(执行结束, endtime)print(耗时, endtime - starttime)except Exception as e:print(Exception, e.args)