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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
python tornado微信开发入门代码
Aug 24 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python 字符串只保留汉字的方法
Nov 16 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
python中threading和queue库实现多线程编程
Feb 06 Python
pandas数值排序的实现实例
Jul 25 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
dedecms模板标签代码官方参考
2007/03/17 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
使用python Django做网页
2013/11/04 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
在keras中实现查看其训练loss值
2020/06/16 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
经典的班主任推荐信
2013/10/28 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python