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中Django框架利用url来控制登录的方法
Jul 25 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
Python 基础教程之包和类的用法
Feb 23 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
python的Tqdm模块的使用
Jan 10 Python
django 在原有表格添加或删除字段的实例
May 27 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python 发送json数据操作实例分析
Oct 15 Python
Python @property装饰器原理解析
Jan 22 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
如何解决安装python3.6.1失败
Jul 01 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 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实现文件上传二法
2006/10/09 PHP
php中文字符截取防乱码
2008/03/28 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
JS判断两个时间大小的示例代码
2014/01/28 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
pycharm 配置远程解释器的方法
2018/10/28 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
实例详解Python模块decimal
2019/06/26 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
django使用多个数据库的方法实例
2021/03/04 Python
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
财务总监管理岗位职责
2014/03/08 职场文书
品德评语大全
2014/05/05 职场文书
机械专业求职信范文
2014/07/15 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
广播体操比赛主持词
2015/06/29 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript