当前位置: 首页 > news >正文

用Python轻松转换PDF为CSV

数据的可访问性和可操作性是数据管理的核心要素。PDF格式因其跨平台兼容性和版面固定性,在文档分享和打印方面表现出色,尤其适用于报表、调查结果等数据的存储。然而,PDF的非结构化特性限制了其在数据分析领域的应用。相比之下,CSV格式以其简单、通用且易于处理的特点,成为数据操作和分析的理想选择。
将PDF转换为CSV极大地提升了数据的实用价值。Python作为一种强大的编程语言,能够高效完成这一转换任务。本文将介绍如何利用Python实现从PDF到CSV的转换

文章目录

    • 将PDF表格数据转换为CSV文件

本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install Spire.PDF

将PDF表格数据转换为CSV文件

CSV作为一种结构化的通用表格文件,支持以简单的形式储存表格数据,但不支持复杂的格式设置以及复杂的表格信息。因此,我们在转换PDF文档为CSV文件时,通常只转换PDF文档中的表格为CSV文件。
库中提供了PdfTableExtractor类来处理PDF文档表格的提取操作,并且支持获取表格单个单元格的文本。利用这些类和方法,我们就可以实现从PDF表格到CSV文件的转换。
以下是操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument对象。
  3. PdfDocument.LoadFromFile()方法载入PDF文档。
  4. 创建PdfTableExtractor对象以处理表格提取操作。
  5. 循环PDF文档中的页面:
    • 使用PdfTableExtractor.ExtractTable()方法提取当前页面的表格为一个集合。
    • 遍历集合中的表格:
      • 获取表格行数和列数。
      • 遍历行、列:
        • 使用Utilities_PdfTable.GetText()方法获取单元格数据。
        • 将数据储存为列表。
    • 使用csv模块将表格数据写入CSV文件。
  6. 释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor
import csv# 创建一个 PdfDocument 实例
pdf = PdfDocument()# 加载 PDF 文档
pdf.LoadFromFile("示例.pdf")# 创建一个 PdfTableExtractor 实例
extractor = PdfTableExtractor(pdf)# 遍历 PDF 文档的每一页
for i in range(pdf.Pages.Count):# 提取当前页的表格tables = extractor.ExtractTable(i)# 遍历表格for j in range(len(tables)):table = tables[j]tableData = []# 获取行数和列数rowCount = table.GetRowCount()colCount = table.GetColumnCount()# 遍历行和列for row in range(rowCount):rowData = []for col in range(colCount):# 获取单元格的文本text = table.GetText(row, col)text = text.replace("\n", "").replace("\r", "")rowData.append(text)tableData.append(rowData)# 将表格数据保存到 CSV 文件with open(f"output/Tables/Table{i+1}_{j+1}.csv", "w", newline="", encoding="utf-8") as csvFile:writer = csv.writer(csvFile)writer.writerows(tableData)# 释放资源
pdf.Dispose()

转换结果
Python转换PDF为CSV

本文演示了如何使用Spire.PDF for Python将PDF表格转换为CSV文件。

更多PDF文档处理技巧请前往Spire.PDF for Python教程查看。

申请免费License

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【笔记】记一次在linux上通过在线安装mysql报错 CentOS 7 的官方镜像已经不再可用的解决方法+mysql配置
  • 针对 LLM 应用程序优化 RAG
  • QT操作各类数据库用法详解
  • python conda查看源,修改源
  • 20行代码写一个简单 Blazor 时钟组件
  • 模型优化调参利器贝叶斯优化bayesian-optimization实践
  • Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 14-38 剑和诗人12 - RAG+ 思维链 ⇒ 检索增强思维(RAT)
  • 星戈瑞CY7-Amine生物荧光成像
  • linux cpuspeed工具
  • 软件设计之Java入门视频(11)
  • Qt扫盲-QRect矩形描述类
  • Desktop docker 部署 WordPress
  • 智慧矿山:EasyCVR助力矿井视频多业务融合及视频转发服务建设
  • BDD 100K dataset 的标签数据结构(json文件)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Docker: 容器互访的三种方式
  • echarts花样作死的坑
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript-Array类型
  • Javascript编码规范
  • Java精华积累:初学者都应该搞懂的问题
  • Just for fun——迅速写完快速排序
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MySQL主从复制读写分离及奇怪的问题
  • ng6--错误信息小结(持续更新)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Otto开发初探——微服务依赖管理新利器
  • SSH 免密登录
  • V4L2视频输入框架概述
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 分享几个不错的工具
  • 蓝海存储开关机注意事项总结
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 一个JAVA程序员成长之路分享
  • 优化 Vue 项目编译文件大小
  • 走向全栈之MongoDB的使用
  • postgresql行列转换函数
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 交换综合实验一
  • # Maven错误Error executing Maven
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $NOIp2018$劝退记
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (蓝桥杯每日一题)love
  • (七)Java对象在Hibernate持久化层的状态