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选择排序算法实例总结
Jul 01 Python
python实现简易云音乐播放器
Jan 04 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Python反射的用法实例分析
Feb 11 Python
python模仿网页版微信发送消息功能
Feb 24 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
python 命名规范知识点汇总
Feb 14 Python
Python办公自动化之Excel(中)
May 24 Python
Python OpenCV形态学运算示例详解
Apr 07 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php Static关键字实用方法
2010/06/04 PHP
php 数组使用详解 推荐
2011/06/02 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
常用jQuery代码分享
2015/07/14 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python中交换两个元素的实现方法
2018/06/29 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
小学英语教学反思
2014/01/30 职场文书
简历的自我评价
2014/02/03 职场文书
药品营销策划方案
2014/06/15 职场文书
学校志愿者活动总结
2014/06/27 职场文书
个人租房协议书
2014/11/28 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python