前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为了提取pdf中的表格数据,python遇到excel,各显神通!

为了提取pdf中的表格数据,python遇到excel,各显神通!

作者头像
Python与Excel之交
发布2021-08-05 15:26:35
3.2K0
发布2021-08-05 15:26:35
举报
文章被收录于专栏:Python与Excel之交Python与Excel之交

Hi~大家好!

不知大家在工作中有没有过提取pdf表格数据的经历,按照普通人的思维,提取pdf的表格数据的方法可能会选择复制粘贴,但这是一个相当繁杂且重复的工作。而今天我们会讲解如何用python和excel来提取pdf的表格数据,看二者哪个更为方便!

Excel

本次依然使用excel的神器power qoery编辑器,而接下来的操作其实和合并工作表差不多,让我们来看看它是怎么操作的!

excel提取pdf表格数据最好用office365版本,office2016版本的会没有来自PDF这个选项,且不会出现导航器界面,它会连文本一起导入,无法直接选择需要导入的表格,但他可以进入power qoery编辑器时进行筛选出Table类型的表格!二者差别只在于前面几步,看完后有疑问的可以在后台提问哦!

office365安装包(附教程)获取可在公众号后台发送:365 获取!

office2016版本

这里先说下office2016版本的前面操作,从文件导入PDF文件:

这里下面需要选择所有文件,然后导入pdf文件;然后会进入power qoery编辑器,需要筛选出Table类型的表格,然后office365到将查询追加为新查询这一步时,2016版本和365版本的一样:

office365版本

导入pdf文件:①点击【数据】→②点击【获取数据】→③点击【来自文件】→④选择【来自PDF

在弹出的【导入数据】窗口中选择PDF文件:

在弹出的【导航器】窗口中:①勾选【选择多项】→②在【pdf文件】下选择【Table类型的表格】→③查看数据,看是否为你需要的→④点击【转换数据】,跳转至power Query编辑器界面。

接下来把提取出来的表格进行合并。在弹出的power Query编辑器界面中:①选择【主页】→②单击【追加查询下拉箭头】→③选择【将查询追加为新查询

在弹出的【追加】窗口中:①选择【三个或更多表】→②在【可用表】中,把【需要合并的工作表】添加至【要追加的表】中→③调整【工作表顺序】→④点击【确定

修改列名称,最后:①单击【主页】→②单击【关闭并上载】下拉箭头→③单击【关闭并上载

效果展示:

Python

python若想将一份PDF文件的表格导出到excel,可以用pdfplumber实现,安装用pip命令安装即可:

代码语言:javascript
复制
pip install pdfplumber

导入需要用到的模块:

代码语言:javascript
复制
import pdfplumber
import pandas as pd

提取单个表格:

代码语言:javascript
复制
pdf = pdfplumber.open(r'D:\办公自动化\wb1.pdf')
page = pdf.pages[0]  
pprint.pprint(page.extract_table()) 

结果展示,产生的是一个二级嵌套列表:

这里需要注意的是:page = pdf.pages[0]这一行,它表示提取pdf文件中第几页;以及extract_table,它默认提取该页面第一个表格,如果该页面有多个表格要提取,则需要在extract_table加上s,表示提取多个表格。

提取多个表格:

代码语言:javascript
复制
pdf = pdfplumber.open(r'D:\办公自动化\wb1.pdf')
page = pdf.pages[0]  
pprint.pprint(page.extract_tables())

产生的是一个三级嵌套列表:

那如果要保存多页中的多个表格该怎么做?其实建立个for循环就可以了:

代码语言:javascript
复制
pdf = pdfplumber.open(r'D:\办公自动化\wb1.pdf')
for i in range(3): 
    page = pdf.pages[i]  # 传入循环值
    datalist = page.extract_tables()
    # 提取的数据因为是三级嵌套列表,所以需要进行循环提取
    for o in datalist:  
        for p in o:
         # 用pandas保存为csv格式 
            data = pd.DataFrame({'排名': [p[0]], '标题': [p[1]], '热度': [p[2]], '时间': [p[3]]})
            df = pd.concat([df, data])
df.to_csv('wb.csv', encoding='utf-8', index=False)

效果展示:

结语

二者的操作并不是很难,python代码可以重复利用,而excel需要重复操作;python代码虽然会因为PDF文件中的格式以及要提取内容复杂,比如哪个表格不需要之类的问题,而需要更改,但更改的会比较少。虽然需要性重复操作较多,但在提取复杂的表格时,我更建议使用excel。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • office365版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档