将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件

news2025/4/6 23:52:49

文章目录

  • 任务描述
  • 2023年普通高等学校本科专业目录pdf链接
  • 代码
  • 代码解析
  • 运行截图

任务描述

将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件。这个pdf每页是个表格,表格有7列。

下面是pdf的第一页和第二页:
在这里插入图片描述

在这里插入图片描述

2023年普通高等学校本科专业目录pdf链接

链接: https://pan.baidu.com/s/14acDd_L7AtXgKyq_LAV5Rg?pwd=hmne 提取码: hmne

代码

您可以使用 Python 的几个库来做到这一点。以下是一个示例代码,该代码使用了pdfplumber来读取PDF文件,并使用pandas来保存数据到csv文件。

注意:此代码假设您的pdf文件中的表格能够通过线条明确辨识,并且此方法可能不会对所有pdf文件有效,因为pdf的构造和内容可能会对解析产生影响。

import pdfplumber
import pandas as pd

def convert_pdf_to_csv(pdf_file):
    # 打开pdf文件
    with pdfplumber.open(pdf_file) as pdf:
        # 初始化一个空的DataFrame用于存储所有页的数据
        df_all = pd.DataFrame()

        # 遍历每一页
        for page in pdf.pages:
            # 提取表格数据
            tables = page.extract_tables()
            for table in tables:
                # 将表格数据转化为DataFrame
                df = pd.DataFrame(table[1:], columns=table[0])
                df_all = pd.concat([df_all, df])

        # 保存为csv文件
        df_all.to_csv(pdf_file.replace('.pdf', '.csv'), index=False)

# 使用函数
convert_pdf_to_csv("普通高等学校本科专业目录.pdf")

以上代码将遍历PDF中的每一页,并从每页中提取表格数据。这些数据将被合并并保存到一个CSV文件中。最后的CSV文件名将与输入的PDF文件名相同,只是扩展名变为了".csv"。

代码解析

这段代码是在Python环境下运行的首先,它需要导入两个库:pdfplumberpandas

  1. import pdfplumber: pdfplumber 是一个Python库,用于提取PDF中的文本、表格和元数据。

  2. import pandas as pd: pandas 是一个Python数据分析库,这里主要用它来创建和操作DataFrame(一个二维标签化的数据结构),并将DataFrame保存为csv文件。

然后,定义了一个名为convert_pdf_to_csv的函数,该函数接受一个参数pdf_file,代表要转换的PDF文件名。

  1. with pdfplumber.open(pdf_file) as pdf: 使用pdfplumberopen函数打开PDF文件。with语句用于包裹文件操作的上下文,确保文件在操作完毕后被正确关闭。

  2. df_all = pd.DataFrame(): 初始化一个空的DataFrame,用于存储从每一页PDF中提取出来的表格数据。

  3. for page in pdf.pages: 遍历PDF的每一页。

  4. tables = page.extract_tables(): 使用pdfplumberextract_tables函数从每一页中提取表格数据,这会返回一个列表,每个元素代表一页中的一个表格,表格本身也是一个列表,其中包含行数据。

  5. for table in tables: 对于每个提取出来的表格。

  6. df = pd.DataFrame(table[1:], columns=table[0]): 将表格数据转换为DataFrame。这里假设表格的第一行是列名,所以我们用table[0]作为列名,剩余的table[1:]作为数据。

  7. df_all = pd.concat([df_all, df]): 将当前页的DataFrame(df)与总的DataFrame(df_all)合并。

  8. df_all.to_csv(pdf_file.replace('.pdf', '.csv'), index=False): 将最后的DataFrame保存为csv文件。文件名通过将原PDF文件名的’.pdf’部分替换为’.csv’得到。参数index=False表示在保存csv时不包括索引。

最后一行是调用这个函数,将指定的PDF文件转换为CSV文件。

运行截图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10.3.2 【Linux】历史命令:history

[dmtsaistudy ~]$ alias hhistory 在正常的情况下,历史命令的读取与记录是这样的: 当我们以 bash 登陆 Linux 主机之后,系统会主动的由主文件夹的 ~/.bash_history 读取以前曾经下过的指令,那么 ~/.bash_history 会记录几笔数据呢…

microblaze生成download.bit 报错:Program FPGA failed Reason: couldn‘t open......

报错信息: couldn’t open “E:/Xilinx_Project/……/……/…….sdk/top_wrapper_hw_platform_0/download.bit”: no such file or directory [Updatemem 57-153] Failed to update the BRAM INIT strings for E:\Xilinx_Project\……\……\…….sdk\……\Debug\……

基于vue的地方美食分享网站(spring boot)

本项目在开发和设计过程中涉及到原理和技术有:B/S、java技术和MySQL数据库等等。开发步骤如下: 绪论;剖析项目背景,说明研究的内容。 开发技术;系统主要使用了java技术,b/s模式和myspl数据库.

react-基础-01

vue tutorial 上的小demo 改用react 写法 属性绑定 <div className{xx}></div>事件绑定 import React, { useState } from react;export function App(props) {const [count, setCount] useState(0)function add() {setCount(count 1)}return (<div classN…

Broadcast 广播使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Broadcast概述二、Broadcast的注册三、Broadcast的注册类型四、静态注册开机广播的实现五、动态监听亮灭屏幕广播实现六、广播的发送方法七、参考文…

【Hello mysql】 mysql的内置函数

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的基内置函数 mysql的内置函数 日期函数获取年月日获取时分秒获取时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之差创建一张表 记录生日创建一个留言表 字符串函数获取emp表的ename列的字符集…

arm学习stm32芯片学习方波启动蜂鸣器,马达,风扇

main.c #include "pwm.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//蜂鸣器初始化hal_pwm_beep_init1();//马达hal_pwm_motor_init1();//风扇hal_pwm_blower_…

MySQL 06 :多表查询

MySQL 05 :多表查询 加where过滤 老韩分析 1。雇员名&#xff0c;雇员工资来自emp表 2。部门的名字来自dept表 3。 需求对emp和dept查询 ename&#xff0c;sal&#xff0c;dname&#xff0c;deptno 4。 当我们需要指定显示某个表的列是&#xff0c;需要表&#xff0c; 说明 …

视频的特效效果是怎么加的?可以批量添加吗

经常逛自媒体平台的小伙伴不难发现&#xff0c;要想原创的短视频更有创造性&#xff0c;内容更丰富&#xff0c;给视频添加特效效果算是比较常用的一个方法了。今天小编要分享的可不只是单一地给视频添加特效这么简单&#xff0c;我要给大家分享如何才能快速地批量给视频素材添…

Linux 学习记录46(QT篇)

Linux 学习记录46(QT篇) 本文目录 Linux 学习记录46(QT篇)一、建立QT项目工程二、Assistant帮助文档的使用三、自动生成的文件介绍1. tempprj.pro2. mainwindow.h3. mainwindow.cpp4. main.cpp5. mainwindow.ui 四、常用类的介绍1. 信息调试类(1. qDebug(2. 输出当前界面尺寸(3…

stm32(DMA)

DMA介绍 什么是DMA&#xff1f; 令人头秃的描述&#xff1a; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU&#xff0c;在这…

解决Anaconda第三方库下载慢

1.打开Anconda Prompt&#xff0c;进入后台 2.执行命令第一个是添加一个清华镜像&#xff0c;第二个设置在 conda 显示通道的 URL。 &#xff08;1&#xff09;conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ &#xff08;2&#xff0…

无线振动传感器之利:实现设备远程监控和管理

在现代工业生产中&#xff0c;设备的远程监控和管理对于提高生产效率和降低成本至关重要。而无线振动传感器作为一种先进的监测技术&#xff0c;能够快速实现设备的远程监控&#xff0c;提供实时的振动数据和设备健康状况&#xff0c;为企业的运维管理带来了许多优势。本文将介…

第十九章:Linux中安装MySQL

第十九章&#xff1a;Linux中安装MySQL 19.1&#xff1a;卸载MySQL 查看是否安装过MySQL # 如果你是用rpm安装&#xff0c;检查一下RPM PACKAGE rpm -qa | grep -i mysql # 检查 mysql service systemctl status mysqld.service # CentOS6和CentOS7在MySQL的使用中的区别 # 防…

React-Native学习,RN的容器Flex-Box布局

justify-content&#xff08;在RN中属性名称为&#xff1a;justifyContent&#xff09;在主轴上对齐方式 align-items&#xff08;在RN中属性名称为&#xff1a;alignItems&#xff09;在交叉轴上的对齐方式 在React Native中&#xff0c;当没有设置容器的主轴方向时&#xf…

Web-文件上传

需求 新增员工和修改员工的需求会需要上传对应的图像 先实现对应的新增需求吧 &#xff01;&#xff01;&#xff01;RequestBody,因为传参是json格式&#xff0c;还是看对应接口文档&#xff01;&#xff01;&#xff01; controller service mapper xml 对应代码 &…

Jstat命令解析

Jstat命令解析 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”&#xff0c;它位于java的bin目录下&#xff0c;主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控&#xff0c;包括了对Heap size和垃圾回收…

单元测试与端到端测试——主要区别

目录 前言&#xff1a; 什么是单元测试&#xff1f; 单元测试生命周期 单元测试的好处 那么它有什么好处呢&#xff1f; 单元测试示例 单元测试的类型 单元测试工具 什么是端到端测试&#xff1f; 端到端测试 端到端测试的主要好处是什么&#xff1f; 端到端测试示…

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools&#xff0c;其中使用了 tauri 提供的 fetch API&#xff0c;在开发调试过程中遇到了一些权限和参数问题&#xff0c;在此记录下来。 权限配置 在 tauri 应用中&#xff0c;如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式&#xff08;Regular Expression&#xff0c;简称为RegExp或Regex&#xff09;是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…