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 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
Python创建系统目录的方法
Mar 11 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python skimage 连通性区域检测方法
Jun 21 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python中私有属性的定义方式
Mar 05 Python
Python3+selenium配置常见报错解决方案
Aug 28 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
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP Cookie学习笔记
2016/08/23 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
python属于软件吗
2020/06/18 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
幼儿园教师奖惩制度
2014/02/01 职场文书
财务主管岗位职责
2014/02/28 职场文书
大学生创业事迹材料
2014/12/30 职场文书
大学生求职信怎么写
2015/03/19 职场文书
施工安全保证书
2015/05/09 职场文书
优质护理心得体会
2016/01/22 职场文书