Python 读pdf数据写入Excel表中

简介: Python 读pdf数据写入Excel表中

一、Python操作PDF的库有很多

几大库对比图

5bcb5b6ea37aa62b5a9b744f942288b.png

二、pdflumber作为案例讲解使用

pdfplumber及其依赖pdfminer.six专注PDF内容提取,例如文本(位置、字体及颜色等)和形状(矩形、直线、曲线),前者还有解析表格的功能。

1、优缺点

优点:

对于文字的解析非常优秀,没有发现错字漏字的情况

对于普通表格的解析也很棒

缺点:

对于表格分页的情况处理很弱

合并单元格的表格解析会不够理想,但是效果还是要比tabula好。

2、安装配置

pip install pdfplumber

结果:

cec4b2cbed8a1dd554ad13f65b72edf.png

3、加载PDF

pdf样式:

4f15785383167d1ccca1d40e0f22740.png

资源下载地址(0积分下载):https://download.csdn.net/download/walykyy/86398438

读取pdf文档

import pdfplumber
# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    print(pdf)
    # 打印pdf类型
    print(type(pdf))

4、读取pdf文档信息

1)读取pdf文档信息

属性 描述

.metadata 从PDF的Info中获取元数据键 /值对字典。 通常包括“ CreationDate”,“ ModDate”,“ Producer”等。

.pages 一个包含pdfplumber.Page实例的列表,每一个实例代表PDF每一页的信息。

import pdfplumber

# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    #读取文档信息
    print(pdf.metadata)

结果:

{'Author': 'Tian', 'CreationDate': "D:20220811142408+08'00'", 'ModDate': "D:20220811142408+08'00'", 'Producer': 'Microsoft® Excel® 2016', 'Creator': 'Microsoft® Excel® 2016'}

2)打印pdf文档总页码

属性 说明

.metadata 元祖的形式获取pdf文档的相关信息

.pages 获取pdf的页码

80309021441b1bed9f37f5521fc8bcd.png

import pdfplumber
# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    #读取文档总页码
    print(len(pdf.pages))

5、pdfplumber.page类

是pdfplumber的核心

属性 描述

.page_number 页码顺序,从第一页的1开始,第二页为2,依此类推

.width 页面宽度

.heigh 页面高度

.objects,.chars,.lines,.rects,.curves,.figures,.images 这些属性中的每一个都是一个列表,并且每个列表针对嵌入面上的每个此类对象包含一个字典。 有关更多详细信息,请参见下面的"对象(Object)"

常用方法

方法名 说明

.crop(bounding_box) 返回裁剪后的页面,该bouding_box(边界框)应表示为具有值(x0, top, x1, bottom)的4元组。 裁剪后的页面保留了至少部分位于边界框内的对象。 如果对象仅部分落在该框内,则也会被涵盖。

.within_bbox(bounding_box) 和.crop相似,但是只会包含完全在bounding_box内的部分。

.filter(test_function) 返回仅包含.objects的页面版本,该对象的test_function(obj)返回True。

.extract_text(x_tolerance=0, y_tolerance=0) 将页面的所有字符对象整理到一个字符串中。若其中一个字符的x1与下一个字符的x0之差大于x_tolerance,则添加空格。若其中一个字符的doctop与下一个字符的doctop之差大于y_tolerance,则添加换行符。

.extract_words(x_tolerance=0, y_tolerance=0, horizontal_ltr=True, vertical_ttb=True) 返回所有单词外观及其边界框的列表。字词被认为是字符序列,其中(对于“直立”字符)一个字符的x1和下一个字符的x0之差小于或等于x_tolerance,并且一个字符的doctop和下一个字符的doctop小于或等于y_tolerance。对于非垂直字符也采用类似的方法,但是要测量它们之间的垂直距离,而不是水平距离。参数horizontal_ltr和vertical_ttb指示是否应从左到右(对于水平单词)从上到下(对于垂直单词)读取字词。

.extract_tables(table_settings) 从页面中提取表格数据。

.to_image(**conversion_kwargs) 返回PageImage类的实例。

1)读取pdf的数据(第一页)

3c81b94d7496c0f2f6bc6a199defbb7.png

import pdfplumber
# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    # 读取文档总页码
    page = pdf.pages[0]
    print("第一页页码: ", page.page_number)
    print("第一页页宽: ", page.width)
    print("第一页页高: ", page.height)

2)读取第一页数据

060662dce264019dd66ebd9e26b9f18.png

3)将数据写入到Excel表中

import pdfplumber
import xlwt
# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    # 读取文档总页码
    page = pdf.pages[0]
    # 读取表格数据
    table = page.extract_table()
    # 创建Excel文本
    work_book = xlwt.Workbook(encoding='utf-8')
    # 新建sheet表格
    work_sheet = work_book.add_sheet('sheet1')
    # 定义列名
    col = table[0]
    #将col写入到表单第一行,['省市', '地市', '用电类别', '当期值']
    for i in range(0, len(col)):
        work_sheet.write(0, i, col[i])
    #将数据写入到sheet表中
    for i in range(0, len(table[1:])):
        data = table[1:][i]
        for j in range(0, len(col)):
            work_sheet.write(i + 1, j, data[j])
    #保存
    work_book.save('test2.xls')

结果:

a0ee4ecc52251cc248a665426f56e15.png

4)读取完整pdf文档写入到Excel中

import pdfplumber
import xlwt
# 读取pdf文件
with pdfplumber.open('data.pdf') as pdf:
    # 读取文档总页码
    pages = pdf.pages
    # 定义一个数组
    item = []
    for page in pages:
        # 读取表格数据
        table = page.extract_table()
        for i in table:
            item.append(i)
    # 创建Excel文本
    work_book = xlwt.Workbook(encoding='utf-8')
    # 新建sheet表格
    work_sheet = work_book.add_sheet('sheet1')
    # 定义列名
    col = item[0]
    # 将col写入到表单第一行,['省市', '地市', '用电类别', '当期值']
    for i in range(0, len(col)):
        work_sheet.write(0, i, col[i])
    # 将数据写入到sheet表中
    for i in range(0, len(item[1:])):
        data = item[1:][i]
        for j in range(0, len(col)):
            work_sheet.write(i + 1, j, data[j])
    # 保存
    work_book.save('test2.xls')

8431622693655ba78112627a3ea030e.png

5)多pdf文本写入到Excel表中

import pdfplumber
import xlwt
import os
# 读取文件夹路径
file_dir = r'D:\pythonproject\file'
file_list = []
# 循环读取路径pdf文件
for files in os.walk(file_dir):
    # print(files) ('D:\\pythonproject\\file', [], ['1.pdf', '2.pdf', '3.pdf'])
    for file in files[2]:
        # 对文件名切割,以.作为切割符;拼接地址存入file_list中
        if file.split('.')[1] == 'pdf' or file.split('.')[1] == 'PDF':
            file_list.append(file_dir + '\\' + file)
# 定义一个临时表存放数据
item = []
# 读取pdf文件
for file_page in file_list:
    with pdfplumber.open(file_page) as pdf:
        for page in pdf.pages:
            for i in page.extract_table():
                item.append(i)
# 创建Excel文本
work_book = xlwt.Workbook(encoding='utf-8')
# 新建sheet表格
work_sheet = work_book.add_sheet('sheet1')
# 定义列名
col = item[0]
# 将col写入到表单第一行,['省市', '地市', '用电类别', '当期值']
for i in range(0, len(col)):
    work_sheet.write(0, i, col[i])
# 将数据写入到sheet表中
for i in range(0, len(item[1:])):
    data = item[1:][i]
    for j in range(0, len(col)):
        work_sheet.write(i + 1, j, data[j])
# 保存
work_book.save('test3.xls')

d38b872368d2cf79c6bd2e80f468174.png

注意:pdf文档转换的时候一定要弄好,Excel转pdf时候转换成功,但是里面有乱码导致一直读不出来报错,搞了好久


相关文章
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
8762 1
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
871 0
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
人工智能 Java Linux
Python高效实现Excel转PDF:无Office依赖的轻量化方案
本文介绍无Office依赖的Python方案,利用Spire.XLS、python-office、Aspose.Cells等库实现Excel与PDF高效互转。支持跨平台部署、批量处理、格式精准控制,适用于服务器环境及自动化办公场景,提升转换效率与系统稳定性。
1155 7
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
1012 0
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。

推荐镜像

更多