手把手教你用Python提取PDF中的表格
2023-03-15 22:07:33 时间
前言
pdfplumber
是一个开源的 python
工具库 ,它可以轻松的获取 PDF
文本内容、标题、表格、尺寸等各种信息,今天来介绍如何使用它来提取 PDF
中的表格。
安装
首先通过下面命令安装 pdfplumber
模块。
pip install pdfplumber
复制代码
或是使用豆瓣镜像源安装。
pip install -i https://pypi.douban.com/simple pdfplumber
复制代码
案例
这里有一份2020年中国大学生计算机设计大赛参赛作品获奖名单,文件为 PDF
格式,每页都包含表格,表格中包含为各支队伍的获奖信息,共158页。表格前两页内容如下。
下面将 PDF
中的表格提取出来,并保存到 Excel
中。
首先导入所需要的模块:
import pdfplumber
import pandas as pd
复制代码
读取 PDF
文件
read_path = '2020年中国大学生计算机设计大赛参赛作品获奖名单.pdf'
pdf_2020 = pdfplumber.open(read_path)
复制代码
pages
属性包含 PDF
中每页的信息,循环每页内容,使用 extract_table()
方法提取每页中的表格数据,并将数据转为 DataFrame
,最后合并每页的数据。
result_df = pd.DataFrame()
for page in pdf_2020.pages:
table = page.extract_table()
df_detail = pd.DataFrame(table[1:], columns=table[0])
# 合并每页的数据集
result_df = pd.concat([df_detail, result_df], ignore_index=True)
复制代码
此时DataFrame中数据如下:
可以看到通过 extract_table()
提取后的数据有许多包含缺失值的列,我们还需要对DataFrame进行进一步处理,删除全为缺失值的列。
result_df.dropna(axis=1, how='all', inplace=True)
复制代码
删了缺失值后,列名也一并删除了,还需要指定对应列名。
result_df.columns = ['奖项', '作品编号', '作品名称', '参赛学校', '作者', '指导老师']
复制代码
到现在我们就成功将表格信息完整的提取出来了!
完整代码
import pdfplumber
import pandas as pd
def read_pdf(read_path, save_path):
pdf_2020 = pdfplumber.open(read_path)
result_df = pd.DataFrame()
for page in pdf_2020.pages:
table = page.extract_table()
print(table)
df_detail = pd.DataFrame(table[1:], columns=table[0])
result_df = pd.concat([df_detail, result_df], ignore_index=True)
result_df.dropna(axis=1, how='all', inplace=True)
result_df.columns = ['奖项', '作品编号', '作品名称', '参赛学校', '作者', '指导老师']
result_df.to_excel(excel_writer=save_path, index=False, encoding='utf-8')
read_path = r'2020年中国大学生计算机设计大赛参赛作品获奖名单.pdf'
save_path = r'2020年中国大学生计算机设计大赛参赛作品获奖名单.xlsx'
read_pdf(read_path, save_path)
相关文章
- Python中的函数与方法 以及Bound Method和Unbound Method
- 一文贯通python文件读取
- Python 中的异步编程:Asyncio
- 7个你现在就该学习Python的理由
- 提高Python运行效率的六个窍门
- Python数据科学:神经网络
- 一篇文章看懂大数据分析就业前景及职能定位
- R和Python中的文本挖掘:8个入门小贴士
- 告诉你为什么Python有点慢,但我却无所谓?
- 专注学习DevOps编程语言Top 5推荐
- Python发送邮件脚本
- Python多进程并行编程实践: mpi4py 的使用
- Python语言在未来的发展前景
- Python vs Ruby: 谁是最好的 web 开发语言?
- Python对Ruby:谁在Web开发领域更胜一筹?
- Python一行代码完成并行任务
- Python开发者2017应该关注的七个类库
- python爬虫入门基本知识
- 在终端中优雅地编写Python
- Python机器学习实战:信用卡欺诈检测