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 ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python实现全角半角字符互转的方法
Nov 28 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
Python 音频生成器的实现示例
Dec 24 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
python3 logging日志封装实例
Apr 08 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定时发送服务的解决办法
2017/04/23 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
python中sets模块的用法实例
2014/09/30 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
python添加模块搜索路径方法
2017/09/11 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
教学个人的自我评价分享
2014/02/16 职场文书
七一建党节演讲稿
2014/09/11 职场文书
清洁员岗位职责
2015/02/15 职场文书
投标单位介绍信
2015/05/05 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
Go语言怎么使用变长参数函数
2022/07/15 Golang