Python 提取PDF表格数据并保存到TXT文本或Excel文件

目录

安装Python库

Python提取PDF表格数据并保存到文本文档

Python提取PDF表格数据并保存到Excel文档


PDF文件常用于存储和共享各种类型的文档,这些文档可能包括大量的数据表格。通过提取这些PDF表格数据,我们可以将其导入到Excel、数据库或统计软件等数据分析工具中,从而开展深入的数据分析并生成报告。与手动输入大量数据相比,采用编程方式提取表格数据能够帮助我们避免出错并节省大量时间。这篇文章将介绍如何使用Python提取PDF表格的数据,主要包括以下内容:

  • Python提取PDF表格数据并保存到TXT文本文档
  • Python提取PDF表格数据并保存到Excel文档

安装Python库

要提取PDF表格数据并保存到文本文档和Excel文档,可以使用Spire.PDF for Python和Spire.XLS for Python库。Spire.PDF for Python主要用于提取PDF表格数据,Spire.XLS for Python主要用于将提取的表格数据写入Excel文档。

你可以通过以下pip命令来安装它们:

pip install Spire.Xls
pip install Spire.Pdf

Python提取PDF表格数据并保存到文本文档

提取PDF文档中的表格数据主要包括以下三个关键步骤:

  • 检索表格

使用PdfTableExtractor.ExtractTable(pageIndex)方法从PDF页面中提取表格。这一步能够快速定位和获取PDF文档中的表格。需要注意的是,Spire.PDF for Python通过表格的边框来识别表格,因此要确保你的PDF文档中的表格是有边框的。

  • 读取数据

对于获取的每个表格,使用PdfTable.GetText(rowIndex, columnIndex)方法来读取表格单元格中的文本数据。这样可以将表格中的内容逐一提取出来。

  • 保存数据

将提取的表格数据写入到文本文件中。

代码如下:

from spire.pdf.common import *
from spire.pdf import *

# 创建PdfDocument对象
doc = PdfDocument()
# 加载PDF文件
doc.LoadFromFile("表格1.pdf")

# 创建一个用于存储表格数据的列表
builder = []

# 创建一个PdfTableExtractor对象
extractor = PdfTableExtractor(doc)

# 循环遍历页面
for pageIndex in range(doc.Pages.Count):
    # 从当前页面中提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 判断表格列表是否为空
    if tableList is not None and len(tableList) > 0:
        # 循环遍历表格
        for table in tableList:
            # 获取当前表格的行数和列数
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 循环遍历行和列
            for i in range(row):
                for j in range(column):
                    # 获取当前单元格中的文本
                    text = table.GetText(i, j)

                    # 将文本添加到列表中
                    builder.append(text + " ")
                builder.append("\n")
            builder.append("\n")

# 将列表中的内容写入到文本文件中
with open("表格.txt", "w", encoding="utf-8") as file:
    file.write("".join(builder))

Python 读取PDF表格数据并保存到TXT文本文件

Python提取PDF表格数据并保存到Excel文档

除了将提取的数据保存到文本文件外,你还可以通过Spire.XLS for Python提供的Worksheet.Range[rowIndex, columnIndex].Value属性将它们写入到Excel文档。关键步骤如下:

  • 检索表格

使用PdfTableExtractor.ExtractTable(pageIndex)方法从PDF页面中提取表格。这一步能够快速定位和获取PDF文档中的表格。需要注意的是,Spire.PDF for Python通过表格的边框来识别表格,因此要确保你的PDF文档中的表格是有边框的。

  • 读取数据

对于获取的每个表格,使用PdfTable.GetText(rowIndex, columnIndex)方法来读取表格单元格中的文本数据。这样可以将表格中的内容逐一提取出来。

  • 写入数据到Excel工作表

使用Worksheet.Range[rowIndex, columnIndex].Value属性将将提取的表格数据写入到Excel工作表中。

具体代码如下:

from spire.pdf import *
from spire.xls import *

# 创建PdfDocument对象
doc = PdfDocument()

# 加载PDF文件
doc.LoadFromFile("表格1.pdf")

# 创建Workbook对象
workbook = Workbook()
# 清除默认工作表
workbook.Worksheets.Clear()

# 创建PdfTableExtractor对象
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# 循环遍历页面
for pageIndex in range(doc.Pages.Count):
    # 从当前页面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 判断表格列表是否为空
    if tableList is not None and len(tableList) > 0:
        # 循环遍历表格
        for table in tableList:
            # 为当前表格添加一个工作表
            sheet = workbook.Worksheets.Add(f"Sheet{sheetNumber}")

            # 获取表格的行数和列数
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 循环遍历行和列
            for i in range(row):
                for j in range(column):
                    # 获取当前单元格中的文本
                    text = table.GetText(i, j)

                    # 将文本写入工作表的指定单元格
                    sheet.Range[i + 1, j + 1].Value = text

            sheetNumber += 1

# 保存到文件
workbook.SaveToFile("提取PDF表格数据到Excel.xlsx", ExcelVersion.Version2013)

Python 读取PDF表格数据并保存到Excel表格

本文介绍了如何使用Python读取PDF表格数据,并将读取的数据保存到TXT文本文件和Excel表格。除了TXT文本和Excel格式以外,你可以自行将获取的数据写入到其他格式,如CSV、Word表格等。如需了解Spire.PDF for Python和Spire.XLS for Python的更多功能,请自行查看Spire.PDF for Python文档和Spire.XLS for Python文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631044.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Docker进行Jmeter分布式搭建

大家好,随着技术的不断发展,对性能测试的要求也日益提高。在这样的背景下,如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在,就让我们开启这场探索之旅,揭开其神秘的面纱。前段时间给大家分享了关于 L…

如何组织 Vue 项目

介绍 在启动 Vue 项目时,思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中,我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合: “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

平均工资数据分析之回归

链接: R语言实战——中国职工平均工资的变化分析——相关与回归分析 1、模型诊断和评估的方法 1. 残差分析 1、残差图 (Residual Plot):用于检查残差是否存在非随机模式。理想情况下,残差应随机分布在零附近。 2、Q-Q 图 (Quantile-Quantile Plot)&am…

redis-stack部署概要

第一步,下载redis-stack 下载链接:Downloads - Redis 第二步,redis安装包解压缩 gzip -d redis-stack-server-7.2.0-v10.rhel8.x86_64.tar.gz tar -xvf redis-stack-server-7.2.0-v10.rhel8.x86_64.tar 第三步,编辑etc下的redis…

高性能日志库go-logger2.0.4—支持slog日志文件切割

go-logger v2.0.4 发布 该版本主要支持go原生日志库 log/slog 的日志文件切割,压缩等功能。 log/slog 库是 Go 语言用于结构化日志记录的一个强大工具,它旨在提升日志的管理和分析能力,同时保证代码的简洁性和执行效率。随着 Go 语言生态的…

简单聊聊分布式和集群

前言 分布式和集群,我们都听的比较多,分布式系统和集群的概念对于刚进入职场的小伙伴可能不是很清楚,这篇文章我们就一起看看两者到底是什么,有什么区别。 什么是分布式系统? 先看下书面解释: 分布式系统…

学习笔记-C++

目录 1、何为常量 2、关键字 3、实型 4、水平制表符 5、string字符串 6、C中的三目运算符 7、随机数种子 8、结构体 9、各的区 10、引用 11、函数默认参数 12、函数占位参数 13、函数重载 14、私有属性 15、让另一个类作为本类的成员 16、声明和实现的文件…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

初识Django

day15 初识Django Python知识点:函数、面向对象。前端开发:HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库。 Python的Web框架: Flask,自身短小精悍 第三方组件。Django,内部已集成了很多组件 第三方组件。…

GM812条码模块的产品说明

1 模块尺寸 引脚定义 (单位:mm) 接口定义:规格 1.25*6Pin 接口说明: a) UART 缺省波特率为 9600bps,数据格式:8 位数据位,1 位停止位,无校验位。 b) 如果上位机是 MCU(3.3V&#x…

Java面试八股之Java中有哪些原子类,原理是什么

Java中有哪些原子类,原理是什么 AtomicInteger 和 AtomicLong: 用于对整数(int)和长整数(long)进行原子操作。 原理:它们内部封装了一个整型或长整型变量,并通过使用Unsafe类提供…

括号生成[中等]

优质博文:IT-BLOG-CN 一、题目 数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:["((()))","(()())","(())(…

项目管理-案例重点知识(干系人管理)

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 四、干系人管理 案例重点知识 干系人管理 案例 重点内容: (1)权力利益方格、权力影响方格&#xff…

GPT-4o“成精了”:推测技术原理,附送“美国湾区”小道消息

原创:谭婧 如果你能跟上技术发展,那大多数技术提升都是按部就班, 偶而会有突破性进展。 如果你仅仅吃瓜,那OpenAI的所有新闻, 你都可以写成: “改写历史”“干翻所有”“颠覆世界”。 真的颠覆世界了吗&…

ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处

1.需求分析: 就敌人ai而言,追踪到敌人有可能丢失目标,丢失目标后应该能返回原来位置,实现这一功能。 2.操作实现: 1.思路:利用clear value函数,禁用掉当前的追踪功能,执行之后的返…

Git项目管理——提交项目和版本回退(二)

个人名片: 🎓作者简介:嵌入式领域优质创作者🌐个人主页:妄北y 📞个人QQ:2061314755 💌个人邮箱:[mailto:2061314755qq.com] 📱个人微信:Vir2025WB…

SSL证书对于网络安全的重要作用

SSL证书是一种数字证书,它通过加密技术确保了客户端(如浏览器)与服务器之间的数据传输安全。当一个网站安装了SSL证书后,用户在浏览器地址栏中可以观察到HTTPS(超文本传输安全协议)前缀和挂锁图标&#xff…

聚鼎科技:装饰画行业到底怎么样

在当代社会,随着人们审美水平的提升和生活品质的追求,装饰画行业呈现出蓬勃的发展态势。这一行业不仅关系到文化艺术的传承与创新,也与市场经济紧密相连,其前景值得深入探讨。 装饰画行业的市场潜力巨大,它贯穿于家居装…

Git使用(4):分支管理

一、新建分支 首先选择Git -> Branches... 然后选择 New Branch,输入新分支名称,例如dev。 可以看到右下角显示已经切换到新建的dev分支了。 push到远程仓库,可以看到新添加的分支。 二、切换分支与合并分支 为了演示合并分支&#xff0c…

【opencv】答题卡判分实验

实验环境: anaconda、jupyter notebook 实验用的包:numpy、matplotlib、opencv 实验的目的还是以熟悉图像的透视变换、轮廓特征提取为主要目的 关于如何判断答题卡被选项:通过几个覆盖备选项的掩膜与原二值图像想与,最终整个图像…