从PDF文件提取表格到Excel就这么简单!

从PDF文件提取表格到Excel就这么简单!

PDF 文件处理

PDF(Portable Document Format的简称,意为“可携带文档格式”),是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。

可移植文档格式是一种电子文件格式。这种文件格式与操作系统平台无关,也就是说,PDF文件不管是在Windows,Unix还是在苹果公司的Mac OS操作系统中都是通用的。这一特点使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式。越来越多的电子图书、产品说明、公司文告、网络资料、电子邮件在开始使用PDF格式文件。

Adobe公司设计PDF文件格式的目的,是跨平台支持多媒体集成信息的出版和发布,尤其是提供对网络信息发布的支持。为了达到此目的, PDF具有许多其他电子文档格式无法相比的优点。PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。

安装 pdfplumber

neo@MacBook-Pro-Neo ~/workspace/python % pip install pdfplumber 

查看 pdfplumber 是否安装成功

neo@MacBook-Pro-Neo ~/workspace/python % pip show pdfplumber
Name: pdfplumber
Version: 0.5.26
Summary: Plumb a PDF for detailed information about each char, rectangle, and line.
Home-page: https://github.com/jsvine/pdfplumber
Author: Jeremy Singer-Vine
Author-email: jsvine@gmail.com
License: UNKNOWN
Location: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
Requires: pdfminer.six, Pillow, Wand
Required-by:   

获取PDF文档信息

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
 print(pdf.metadata)  

输出结果

{'Producer': 'macOS 版本11.2.1(版号20D74) Quartz PDFContext', 'CreationDate': "D:20210227145013Z00'00'", 'ModDate': "D:20210227145013Z00'00'"}  

获取PDF总页数

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
 print(len(pdf.pages)) 

查看PDF页面信息

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

 first_page = pdf.pages[0]
 
 # 查看当前页码
 print('页码:',first_page.page_number)

 # 查看当前页宽
 print('页宽:',first_page.width)

 # 查看当前页高
 print('页高:',first_page.height) 

输出结果

neo@MacBook-Pro-Neo ~/workspace/python % python3 pdf.py
页码: 1
页宽: 1324
页高: 7638

提取文本内容

PDF样本文件

萃取程序

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

 first_page = pdf.pages[0]
 
 # 读取文本
 text = first_page.extract_text()
 print(text) 

输出结果

neo@MacBook-Pro-Neo ~/workspace/python % python3 pdf.py
⾸页   ENGLISH   RSS订阅   统计微博|统计微讯|移动客户端 2021年2⽉27⽇ 星期六
检索 | ⾼级
热词: GDP  CPI  PPI  PMI  总⼈⼜  社会消费品零售总额
国家统计局 最新发布 统计动态 统计百科 微观数据申请 公开指南
派驻纪检组 数据查询 通知公告 统计词典 曝光台 公开规定
机构职能 数据解读 图⽚新闻 常见问题解答 ⾏政处罚信息 公开⽬录
当前位置 > ⾸页 > 统计数据 > 最新发布
第第四四次次全全国国经经济济普普查查公公报报((第第七七号号))
来源:国家统计局 发布时间:2019-11-20 10:00 关闭窗⼝ 打印本⻚
第四次全国经济普查公报(第七号)
——分区域单位和从业⼈员情况
 
国家统计局
国务院第四次全国经济普查领导⼩组办公室
 
2019年11⽉20⽇
 
  根据第四次全国经济普查结果,现将我国分区域的单位和从业⼈员基本情况公布如下:
 
  ⼀、单位基本情况
 
  2018年末,东部地区拥有法⼈单位1280.2万个,占58.8%,⽐2013年末下降了0.5个百分点;中部地区492.9万个,占22.6%,提
⾼了0.1个百分点;西部地区405.8万个,占18.6%,提⾼了0.4个百分点。东部地区拥有产业活动单位1408.3万个,占57.4%;中部地
区568.4万个,占23.2%;西部地区478.3万个,占19.5%。
 
  在第⼆产业和第三产业法⼈单位中,位居前三位的地区是:⼴东省312.7万个,占14.3%;江苏省205.4万个,占9.4%;⼭东
省180.1万个,占8.3%。
 
  按地区分组的单位情况详见表7-1。

提取pdf中的表格数据

PDF文件内容如下

数据萃取程序

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
 first_page = pdf.pages[0]
 table = first_page.extract_table()
 print(table) 

table 中是一行一行的数据

import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

    first_page = pdf.pages[0]
    table = first_page.extract_table()
    # print(table)
    for t in table:
        print(t)

输出结果如下

neo@MacBook-Pro-Neo ~/workspace/python % python3 pdf.py
['关注', '⽐较', '序号', '基⾦代码', '基⾦简称', '2021-02-26', None, '2021-02-25', None, '⽇增长值', '⽇增长率', '申购状态', '赎回状态', '⼿续费']
[None, None, None, None, None, '单位净值', '累计净值', '单位净值', '累计净值', None, None, None, None, None]
['', '', '1', '501030', '汇添富中证环境治理指数A 估值图 基⾦吧', '0.5501', '0.5501', '0.5421', '0.5421', '0.0080', '1.48%', '开放', '开放', '0.12%']
['', '', '2', '501031', '汇添富中证环境治理指数C 估值图 基⾦吧', '0.5471', '0.5471', '0.5392', '0.5392', '0.0079', '1.47%', '开放', '开放', '0.00%']
['', '', '3', '164908', '交银中证环境治理(LOF) 估值图 基⾦吧', '0.4890', '0.4890', '0.4820', '0.4820', '0.0070', '1.45%', '开放', '开放', '0.12%']
['', '', '4', '004005', '东⽅民丰回报赢安混合A 估值图 基⾦吧', '1.0564', '1.0709', '1.0438', '1.0583', '0.0126', '1.21%', '开放', '开放', '0.06%']
['', '', '5', '004006', '东⽅民丰回报赢安混合C 估值图 基⾦吧', '1.0463', '1.0593', '1.0338', '1.0468', '0.0125', '1.21%', '开放', '开放', '0.00%']
['', '', '6', '003359', '⼤成360互联⽹+⼤数据100C 估值图 基⾦吧', '1.2160', '1.2160', '1.2060', '1.2060', '0.0100', '0.83%', '开放', '开放', '0.00%']
['', '', '7', '002236', '⼤成360互联⽹+⼤数据100A 估值图 基⾦吧', '1.2450', '1.2450', '1.2350', '1.2350', '0.0100', '0.81%', '开放', '开放', '0.12%']
['', '', '8', '004685', '⾦元顺安元启灵活配置混合 估值图 基⾦吧', '1.8064', '1.8064', '1.8023', '1.8023', '0.0041', '0.23%', '开放', '开放', '0.15%']
['', '', '9', '970008', '华安证券汇赢增利⼀年持有混合C 估值图 基⾦吧', '1.0241', '1.0241', '1.0222', '1.0222', '0.0019', '0.19%', '开放', '暂停', '0.15%']
['', '', '10', '110036', '易⽅达双债增强债券C 估值图 基⾦吧', '1.6250', '1.7750', '1.6220', '1.7720', '0.0030', '0.18%', '开放', '开放', '0.00%']
['', '', '11', '970007', '华安证券汇赢增利⼀年持有混合B 估值图 基⾦吧', '1.0191', '1.0191', '1.0173', '1.0173', '0.0018', '0.18%', '开放', '暂停', '0.00%']
['', '', '12', '970006', '华安证券汇赢增利⼀年持有混合A 估值图 基⾦吧', '0.9643', '1.2003', '0.9626', '1.1986', '0.0017', '0.18%', '封闭期', '封闭期', '---']
['', '', '13', '008827', '建信易盛郑商所能源化⼯期货ET... 估值图 基⾦吧', '1.1550', '1.1550', '1.1534', '1.1534', '0.0016', '0.14%', '开放', '开放', '0.15%']
['', '', '14', '008828', '建信易盛郑商所能源化⼯期货ET... 估值图 基⾦吧', '1.1533', '1.1533', '1.1517', '1.1517', '0.0016', '0.14%', '开放', '开放', '0.00%']
['', '', '15', '007817', '国泰中证全指通信设备ETF联接A 估值图 基⾦吧', '0.9943', '0.9943', '0.9930', '0.9930', '0.0013', '0.13%', '开放', '开放', '0.10%']
['', '', '16', '110035', '易⽅达双债增强债券A 估值图 基⾦吧', '1.6840', '1.8340', '1.6820', '1.8320', '0.0020', '0.12%', '开放', '开放', '0.08%']

保存数据到 Excel

安装依赖包 openpyxl 否则会提示让你安装。

neo@MacBook-Pro-Neo ~/workspace/python % pip install openpyxl

import os,pdfplumber

import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

# 读取pdf文件,保存为excel
with pdfplumber.open(file) as pdf:
 first_page = pdf.pages[0]

 # 自动读取表格信息,返回列表
 table = first_page.extract_table()
 # print(table)

 save = pd.DataFrame(table[2:],columns=table[0])
 # 保存excel
 save.to_excel('output.xlsx') 

输出结果如下

从大量PDF文件提取数据到Excel是许多人都需要的一个任务,这可以让我们更快地分析和处理数据,也可以让我们更快速地获取想要的信息。但是,由于PDF文件的格式特殊,我们需要一些专门的工具来辅助我们进行数据提取。 在这个任务,我们可以使用几个工具,比如程序语言Python以及一些Python库,比如PyPDF2和Pandas。PyPDF2是一个用于处理PDF文件Python库,而Pandas是一个用于数据处理的Python库,这两个库的结合可以让我们更轻松地从大量PDF文件提取数据。 首先,我们需要安装Python,然后安装PyPDF2和Pandas。在安装完成之后,我们可以打开Python的IDE,然后编写一些代码来实现我们的需求。 我们需要用代码打开每个PDF文件,然后从文件提取需要的数据。我们可以使用PyPDF2库PdfFileReader对象来读取PDF文件,然后使用Pandas来将数据以表格的形式保存在Excel。 通常情况下,我们可以使用Python的for循环来找到并打开每个PDF文件,然后提取需要的数据。我们可以使用Pandas来创建一个新的Excel表格,并将提取的数据添加到表格。在代码执行完毕之后,我们就可以在Excel查看并使用提取的数据了。 总之,从大量PDF文件提取数据到Excel并不难,我们只需要使用正确的工具和编写正确的代码就能完成任务。使用Python和相应的Python库,我们可以在很短的时间内轻松地完成这项工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

netkiller-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值