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脚本获取操作系统版本信息
Dec 17 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
django框架auth模块用法实例详解
Dec 10 Python
在pycharm中创建django项目的示例代码
May 28 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
Python基于Serializer实现字段验证及序列化
Nov 04 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
ThinkPHP标签制作教程
2014/07/10 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
php链表用法实例分析
2015/07/09 PHP
php微信公众号开发模式详解
2016/11/28 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
Python实现命令行通讯录实例教程
2016/08/18 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
python求解汉诺塔游戏
2020/07/09 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
Java servlet面试题
2012/03/04 面试题
霸气队列口号
2014/06/18 职场文书
征兵宣传标语
2014/06/20 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
Python绘制分类图的方法
2021/04/20 Python
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
mysql如何查询连续记录
2022/05/11 MySQL
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python