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
Python3实现从指定路径查找文件的方法
May 22 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
flask中的wtforms使用方法
Jul 21 Python
Python中使用遍历在列表中添加字典遇到的坑
Feb 27 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
python PIL模块的基本使用
Sep 29 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php抓即时股票信息
2006/10/09 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
Javascript中的getter和setter初识
2017/08/17 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
Python使用爬虫猜密码
2016/02/19 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
深入浅析python的第三方库pandas
2020/02/13 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
全球速卖通巴西站点:Aliexpress巴西
2016/08/24 全球购物
应届大学生求职信
2013/12/01 职场文书
信息管理员岗位职责
2013/12/01 职场文书
合伙经营协议书
2014/04/18 职场文书
英语教师求职信
2014/06/16 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2015年材料员工作总结
2015/04/30 职场文书
公司借条范本
2015/05/25 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
检举信的写法
2019/04/10 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python