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 相关文章推荐
在Django的模板中使用认证数据的方法
Jul 23 Python
Python使用gensim计算文档相似性
Apr 10 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
Python 经典算法100及解析(小结)
Sep 13 Python
Python3 中sorted() 函数的用法
Mar 24 Python
Python 在函数上添加包装器
Jul 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
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
Python中的localtime()方法使用详解
2015/05/22 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
如何在python中判断变量的类型
2020/07/29 Python
python实现双人五子棋(终端版)
2020/12/30 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
主题婚礼策划方案
2014/02/10 职场文书
教师远程培训感言
2014/03/06 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
公司副总经理任命书
2014/06/05 职场文书
食品安全标语
2014/06/07 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
检讨书范文1000字
2015/01/28 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS