python实现PDF中表格转化为Excel的方法


Posted in Python onJune 16, 2020

这几天想统计一下《中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告》中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转成Excel格式。

python实现PDF中表格转化为Excel的方法

看过别人写的博客,发现Python解析PDF有以下四种方式:

-pdfminer:擅长文字的解析,把表格解析成普通的文本,没有格式;
-pdf2html:把pdf解析成html,但html的标签并没有规律,解析一个表格还可以,多个表格的话不太好提取;
-tabula:对于简单的表格,即单元格中没有换行的,表头表尾形式不复杂的,使用比较方便。但是单脑需要Java环境;
-pdfplumber:是一个可以处理pdf格式信息的库。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。

本文采用pdfplumber库读取PDF中的表格,运行环境:Python3.5.2,Anaconda4.2.0。首先简单介绍一下pdfplumber库:

-pdfplumber.pdf中包含了.metadata和.pages两个属性:
.metadata是一个包含pdf信息的字典。
.pages是一个包含页面信息的列表。

-pdfplumber.page的类中包含的主要的属性:

.page_number 页码。
.width 页面宽度。
.height 页面高度。
.objects/.chars/.lines/.rects 这些属性中每一个都是一个列表,每个列表都包含一个字典,每个字典用于说明页面中的对象信息, 包括直线,字符, 方格等位置信息。

-一些常用的方法:

.extract_text() 用来提页面中的文本,将页面的所有字符对象整理为的那个字符串。
.extract_words() 返回的是所有的单词及其相关信息。
.extract_tables() 提取页面的表格。
.to_image() 用于可视化调试时,返回PageImage类的一个实例。

import pdfplumber
import pandas as pd

path = 'test.pdf'
pdf = pdfplumber.open(path)
i=1
#writer=pd.ExcelWriter('output.xlsx')
df=pd.DataFrame(columns=['序号','刊名','主办单位','等级'])
sheetname=['考古文博','历史学','马克思主义理论','民族学与文化学','文学-外国文学','文学-中国文学','艺术学','语言学','哲学','宗教学','法学'
   ,'管理学','环境科学','教育学','经济学-财政科学','经济学-工业经济','经济学-金融','经济学-经济管理','经济学-经济综合','经济学-贸易经济'
   ,'经济学-农业经济','经济学-世界经济','人文地理学','社会学','体育学','统计学','图书馆情报与档案学','心理学','新闻学与传播学'
   ,'政治学-国际政治','政治学-中国政治','综合-高校综合性学报','综合-综合性人文社科期刊']
   
##由于存在一个表格跨页的情况,先将所有表格存放在一个DataFrame中,再根据序号拆分。

for page in pdf.pages[17:59]:
 print (page)
 # 获取当前页面的全部文本信息,包括表格中的文字
 # print(page.extract_text())
 for table in page.extract_tables():
  #print(table)
  df=df.append(pd.DataFrame(table[1:],columns=table[0]),ignore_index=True)
print (df)

writer=pd.ExcelWriter('output3.xlsx')
new_df=pd.DataFrame()
j=1
index=[]
#记录序号==1的行索引,用于后面的表格拆分
for i in range(len(df)):
 if df.ix[i,0]=='1':
  index.append(i)
  print ("################")
index.append(len(df))
#print (index)

#按行索引将内容切片并逐个添加到表中
for t in range(len(index)-1):
 new_df=df.ix[index[t]:index[t+1]-1,:]
 #print (new_df)
 new_df.to_excel(writer,sheet_name=sheetname[t],encoding='gb2312',index=None)
writer.save()
pdf.close()
print('finished')

最终保存为Excel。

python实现PDF中表格转化为Excel的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
常见的在Python中实现单例模式的三种方法
Apr 08 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
python图像处理之镜像实现方法
May 30 Python
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
解决python flask中config配置管理的问题
Jul 26 Python
Django的Modelforms用法简介
Jul 27 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 #Python
结束运行python的方法
Jun 16 #Python
深入理解Python 多线程
Jun 16 #Python
keras.layer.input()用法说明
Jun 16 #Python
python适合做数据挖掘吗
Jun 16 #Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 #Python
Python实现SMTP邮件发送
Jun 16 #Python
You might like
使用PHP函数scandir排除特定目录
2014/06/12 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
python创建文件备份的脚本
2018/09/11 Python
Python实现分段线性插值
2018/12/17 Python
Linux常见面试题
2016/10/04 面试题
J2EE系统只能是基于web
2015/09/08 面试题
建筑专业自我鉴定
2013/10/22 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
安全检查管理制度
2014/02/02 职场文书
大学生个人自荐信
2014/02/24 职场文书
奥利奥广告词
2014/03/20 职场文书
假面舞会策划方案
2014/05/29 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
企业财务管理制度范本
2015/08/04 职场文书
防溺水安全教育主题班会
2015/08/12 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers