《Python趣味工具》——ppt的操作(刷题版)
前面我们对PPT进行了一定的操作,并将其中的文字提取到了word文档中。现在就让我们来刷几道题巩固巩固吧!
文章目录
- 1. 查看PPT(上)
- 2. 查看PPT(中)
- 3. 查看PPT(下)
- 4. PPT的页码
- 5. 大学期末考试
- 6. 查找重复页
- 7. 用代码写首小诗
1. 查看PPT(上)
由于期末复习的课程很多,每个课程中又包含了一些PPT,小何想能不能通过 input() 函数,实现个性化交互,让同学们通过输入PPT的名称就可以一键提取出对应的文本并写入Word文档呢🤔
那我们通过三道题实现这个功能吧,在本题中,你需要做的是:通过 input() 函数输入 PPT 的页码,就可以找到该页码对应的形状数。
解题步骤:
-
读取指定PPT的幻灯片页;
-
使用 input() 函数让用户输入 PPT 的页码(这份PPT只有91页哦);
-
将输入的页码减去 1 ,作为幻灯片页序列的索引值,并访问其 .shapes 属性;
-
格式化字符串输出"第{x}页有{x}个形状"。
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 将.pptx文件路径赋值给变量path
path = "/Users/xiaohe/statistics.pptx"# 读取path并赋值给变量pptxFile
pptxFile = Presentation(path)# 访问Presentation中的.slides属性,赋值给slide
slide = pptxFile.slides# 使用input()函数"输入PPT的页码:"
# 将输入的内容进行int()类型转换后,赋值给pageNumber
pageNumber=int(input("输入PPT的页码:"))# 将pageNumber减1,赋值给index
index=pageNumber-1# 将index作为幻灯片页的索引值,并访问.shapes属性赋值给shape
shape=slide[index].shapes# 利用len()函数对选中的PPT页进行形状数统计,并赋值shapeNumber
shapeNumber=len(shape)# print()格式化输出f"第{pageNumber}页有{shapeNumber}个形状"
print(f"第{pageNumber}页有{shapeNumber}个形状")
2. 查看PPT(中)
上一次我们已经实现了输入PPT的页码,就能找到该页码对应的形状数这一功能,那么本次我们就来实现通过input() 函数输入PPT页码来获取该页码下面全部的文本内容吧🤔
解题步骤:
-
读取指定PPT的幻灯片页;
-
使用 input() 函数让用户输入 PPT 的页码(这份PPT只有91页哦);
-
将输入的页码减去 1 ,作为幻灯片页序列的索引值;
-
访问PPT每一页里面的全部文本内容,并打印出来;
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 将.pptx文件路径赋值给变量path
path = "/Users/xiaohe/statistics.pptx"# 读取path并赋值给变量pptxFile
pptxFile = Presentation(path)# 访问Presentation对象中的.slides属性,赋值给slide
slide = pptxFile.slides# 使用input()函数"输入PPT的页码(1-91):"
# 将输入的内容进行int()类型转换后,赋值给pageNumber
pageNumber=int(input("输入PPT的页码(1-91):"))# 将pageNumber减1,赋值给index
index=pageNumber-1# 将index作为幻灯片页的索引值,把slide[index]赋值给变量slide_s
slide_s=slide[index]# 将index作为幻灯片页的索引值,for循环遍历slide_s的shapes属性
for shape in slide_s.shapes:# 判断单个shape中是否有文本框if shape.has_text_frame == True:# 读取单个shape中的文本框,并赋值给变量textFrametextFrame = shape.text_framefor para in textFrame.paragraphs:for run in para.runs:# 读取文本框中的文本内容,并赋值给变量textstexts=run.text# print()输出textsprint(texts)
3. 查看PPT(下)
我们在前面已经实现了输入PPT的页码,就能找到该页码对应的形状数以及获取该页码下全部的文本内容等功能,那么本次我们就来实现我们的最终目标吧!🥳通过input() 函数输入PPT名称,一键提取出对应的文本并写入Word文档
解题步骤:
-
新建一个空白的 Word 文档;
-
使用 input() 函数让用户输入 PPT 的名称;
-
访问输入名称的 PPT 中每一页样式块文本内容,使用 add_paragraph() 函数添加文案内容到文档当中;
-
将 Word 文档至指定路径。
文件夹路径下包含的PPT文件有:
可用性.pptx;
易修改性.pptx
质量属性.pptx
保存路径:/Users/xiaohe/资料.docx
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 使用import导入docx
import docx# 新建一个空白Word文档,赋值给变量docxFile
docxFile=docx.Document()# 将文件夹路径赋值给变量path
path = "/Users/xiaohe"# 使用input()函数"输入PPT的名称(可用性/易修改性/质量属性):"
pptName = input("输入PPT的名称(可用性/易修改性/质量属性):")# 将输入的PPT名称构造正确的读取路径并赋值给fileName
fileName = path+"/"+ pptName+".pptx"# 读取fileName并赋值给变量pptxFile
pptxFile = Presentation(fileName)# for循环遍历pptxFile的slides属性
for slide in pptxFile.slides:# for循环遍历slide中.shapes属性for shape in slide.shapes:# 判断单个shape中是否有文本框if shape.has_text_frame == True:# 读取单个shape中的文本框,并赋值给变量textFrametextFrame = shape.text_frame# 按样式块提取文本,并写入Word文档中for para in textFrame.paragraphs:for run in para.runs: docxFile.add_paragraph(run.text)# 保存文档到指定路径,并命名为"资料.docx"
docxFile.save("/Users/xiaohe/资料.docx")
4. PPT的页码
通过今天的学习,我们获取到了 PPT 中全部幻灯片页序列,如何获取PPT的总页码呢?🤔
幻灯片页序列中包含所有幻灯片页对象,可以使用 len() 函数得到序列的长度,也就是PPT的总页码数。
fruitList = [“apple”, “banana”, “watermelon”]
print(len(fruitList))
输出结果为:3
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 将.pptx文件路径赋值给变量path
path = "/Users/xiaohe/statistics.pptx"# 读取path并赋值给变量pptxFile
pptxFile=Presentation(path)# 在Presentation对象中访问.slides属性,并赋值给slides
slides=pptxFile.slides# 使用len()函数获取slides序列的长度,赋值给变量page
page=len(slides)# print()格式化输出f"PPT一共有{page}页"
print(f"PPT一共有{page}页")
5. 大学期末考试
期末考试即将到来,小何开始根据PPT整理复习提纲。然而《软件体系结构》这门课程的PPT太多,依次整理其中的文本内容太麻烦啦😥
下面我们就来实现通过 input() 函数输入PPT名称,输出该PPT下的全部文本内容。
解题步骤:
-
使用 input() 函数让用户输入 PPT 的名称;
-
通过"+“,拼接文件路径;
文件路径:文件夹路径+”/“+输入名称+”.pptx" -
访问输入名称的PPT中每一页里面的全部文本内容,并打印出来;
文件夹路径下包含的PPT的名称为:
可用性
易修改性
质量属性
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 将文件夹路径赋值给变量path
path = "/Users/xiaohe"# 使用input()函数"输入PPT的名称(可用性/易修改性/质量属性):"
# 赋值给pptName
pptName=input("输入PPT的名称(可用性/易修改性/质量属性):")# 构造PPT读取路径并赋值给fileName
fileName=path+"/"+pptName+".pptx"# 读取fileName并赋值给变量pptxFile
pptxFile=Presentation(fileName)# for循环遍历pptxFile的slides属性,赋值给slide
for slide in pptxFile.slides:# for循环遍历slide中.shapes属性,赋值给shapefor shape in slide.shapes:# 判断每个shape中是否有文本框if shape.has_text_frame:# 读取单个shape中的文本框,并赋值给变量textFrametextFrame = shape.text_frame# 读取文本框中的文本内容,并赋值给变量textstexts = textFrame.text# print()输出textsprint(texts) # 有的文件只能这样输出,不用run
6. 查找重复页
由于很多PPT在制作时不小心会存在重复页,小何想能不能通过什么办法快速找出来PPT当中有哪两页是重复的呢🤔
那让我们一起来实现这个功能吧,在本题中,你需要做的是:
-
读取指定路径的PPT;
-
以幻灯片页为单位,将文本全部提取出;
-
定义一个新字典添加键值对,页码为键对应的值为本页文本内容;
-
接下来进行逐页查找,如果查找内容与指定内容相同,并且页码不相同,就格式化字符串输出"第x页和第x页重复"。
示例代码如下:
# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation# 将.pptx文件路径赋值给变量path
path = "/Users/xiaohe/可用性.pptx"# 读取path并赋值给变量pptxFile
pptxFile = Presentation(path)# 定义一个空字典dict_all
dict_all={}# 定义变量pageNumber = 1
pageNumber = 1# for循环遍历pptxfile中的.slides属性
for slide in pptxFile.slides:# 定义一个空字符串textSlidetextSlide=""# for循环遍历slide中.shapes属性for shape in slide.shapes:# 判断单个shape中是否有文本框if shape.has_text_frame == True:# 把单个形状下的全部文本赋值给变量textstexts = shape.text# textSlide累加textstextSlide+=texts# 向字典dict_all添加键值对,pageNumber为键,对应值为textSlidedict_all[pageNumber]=textSlide# pageNumber累加1pageNumber += 1# 变量i设置为1
i = 1# while循环如果i<13
while i<13:# 变量check_k设置为icheck_k=i# check_v设置为dict_all[i]check_v=dict_all[i]# for循环遍历dict_all.items(),并赋值给key, valuefor key,value in dict_all.items():# 如果value等于check_vif value==check_v:# 如果key小于check_kif key<check_k:# 格式化字符串输出# f"第{key}页和第{check_k}页重复"print(f"第{key}页和第{check_k}页重复")# i累加1i += 1
7. 用代码写首小诗
刚学完如何用 Python 将文字写入 Word 文档的你快来写一首小诗送给秋天吧!
文案内容为:
月落乌啼霜满天
江枫渔火对愁眠
姑苏城外寒山寺
夜半钟声到客船
你需要完成:
-
新建一个空白的 Word 文档;
-
使用 input() 函数输入诗句;
-
使用 add_paragraph() 函数添加文案内容到文档当中;
-
将 Word 文档至指定路径。
保存路径:/Users/qu/诗句.docx
示例代码如下:
import docx
dox=docx.Document()for num in range(4):poem=input("poem:")dox.add_paragraph(poem)
dox.save("/Users/qu/诗句.docx")
贺中秋,迎国庆!双节快乐!!!
相关文章:

《Python趣味工具》——ppt的操作(刷题版)
前面我们对PPT进行了一定的操作,并将其中的文字提取到了word文档中。现在就让我们来刷几道题巩固巩固吧! 文章目录 1. 查看PPT(上)2. 查看PPT(中)3. 查看PPT(下)4. PPT的页码5. 大学…...

实战型开发--3/3,clean code
编程的纯粹 hmmm,一开始在这个环节想聊一些具体的点,其实也就是《clean code》这本书中的点,但这个就还是更流于表面; 因为编码的过程,就更接近于运动员打球,艺术家绘画,棋手下棋的过程&#x…...

家用无线路由器如何用网线桥接解决有些房间无线信号覆盖不好的问题(低成本)
环境 光猫ZXHN F677V9 水星MW325R 无线百兆路由器 100M宽带,2.4G无线网络 苹果手机 安卓平板电脑 三室一厅94平 问题描述 家用无线路由器如何用网线桥接解决有些房间无线信号不好问题低成本解决,无线覆盖和漫游 主路由器用的运营商的光猫自带无…...

【Golang】网络编程
网络编程 网络模型介绍 OSI七层网络模型 在软件开发中我们使用最多的是上图中将互联网划分为五个分层的模型: 物理层数据链路层网络层传输层应用层 物理层 我们的电脑要与外界互联网通信,需要先把电脑连接网络,我们可以用双绞线、光纤、…...
使用策略模式优化多重if/else
一、为什么需要策略模式? 作为前端程序员,我们经常会遇到这样的场景,例如 进入一个营销活动页面,会根据后端下发的不同 type ,前端页面展示不同的弹窗。 async getMainData() {try {const res await activityQuery()…...

逆强化学习
1.逆强化学习的理论框架 1.teacher的行为被定义成best 2.学习的网络有两个,actor和reward 3.每次迭代中通过比较actor与teacher的行为来更新reward function,基于新的reward function来更新actor使得actor获得的reward最大。 loss的设计相当于一个排序问…...

postgresql新特性之Merge
postgresql新特性之Merge 创建测试表测试案例 创建测试表 create table cps.public.test(id integer primary key,balance numeric,status varchar(1));测试案例 官网介绍 merge into test t using ( select 1 id,0 balance,Y status) s on(t.id s.id) -- 当匹配上了,statu…...
【注解】注解解析与应用场景
注解解析与应用场景 1.注解解析 注解解析就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来 2.如何解析注解? 思想:要解析谁上面的注解,就应该先拿到谁(通过反射)如果要解析类…...

mysql面试题14:讲一讲MySQL中什么是全同步复制?底层实现?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是全同步复制?底层实现? MySQL中的全同步复制(Synchronous Replication)是一种复制模式,主服务器在写操作完成后,必须等待…...
Linux驱动设备号分配与自动创建设备节点
Linux 驱动设备号 对于 Linux 系统,为了识别和管理设备,每个设备便使用一个唯一的编号来标记设备,每个注册到内核的设备都需要一个编号,这个编号就是设备号,为了细分设备号分为主设备号和次设备号。 由于 Linux 的设…...

基于MFC和OpenCV实现人脸识别
基于MFC和OpenCV实现人脸识别 文章目录 基于MFC和OpenCV实现人脸识别1. 项目说明1. 创建项目2. 启动窗口3. 登录窗口-添加窗口、从启动窗口跳转4. 启动窗口-美化按钮5. 登录窗口-美化按钮、雪花视频6. 注册窗口-美化按钮、雪花视频、从启动窗口跳转7. 注册窗口-开启摄像头8. 注…...

力扣 -- 377. 组合总和 Ⅳ
解题步骤: 参考代码: class Solution { public:int combinationSum4(vector<int>& nums, int target) {int nnums.size();vector<double> dp(target1);//初始化dp[0]1;//填表for(int i1;i<target;i){for(int j0;j<n;j){//填表if(…...

阿里云新账户什么意思?老用户、产品首购详细说明
阿里云新账户、老账号、产品首购和同人账号什么意思?阿里云账号分为云新账户、老账户、产品首购、同人账号和同一用户,阿里云官方推出的活动很多是限制账号类型的,常见的如阿里云新用户,什么是阿里云新用户?是指从未在…...

C++ YAML使用
C++工程如何使用YAML-cpp 一、前期准备工作 1、已安装minGW、cmake、make等本地工具。 2、下载YAML-cpp第三方开源代码(一定要下载最新的release版本,不然坑很多)。 3、生成YAML-cpp静态库 (1)在yaml-cpp-master下建立build文件夹; (2)在该文件夹下生成MakaFile文…...

十二、Django之模板的继承+用户列表
模板的继承 新建layout.html: {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"{% static plugins…...

wzsc_文件上传(条件竞争)
打开题目链接,很常见的文件上传框 经过尝试,发现上传东西后会调用upload.php,猜测文件被传到upload目录下 随便传了几个类型的文件,访问upload目录 发现.php文件以及.htaccess、.user.ini这种配置文件都没有传上去 但是通过抓包…...
unplugin-vue-components和unplugin-auto-import插件
unplugin-auto-import:自动按需引入 vue\vue-router\pinia 等的 api unplugin-vue-components:自动按需引入 第三方的组件库组件 和 我们自定义的组件 使用此类插件,不需要手动编写import {xxx} from vue这样的代码了,提升开发效…...
docker系列文章目录
docker系列专栏笔记总算完成了,平时下班比较晚,利用晚上的一些时间整理了这一系列的学习笔记。 docker系列教程包含以下几个方面: docker环境篇 介绍docker环境的搭建,已经管理平台工具(portainer)的简单使用。 docker常用命令篇…...

第80步 时间序列建模实战:GRNN回归建模
基于WIN10的64位系统演示 一、写在前面 这一期,我们使用Matlab进行GRNN模型的构建。 使用的数据如下: 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrom…...

《C和指针》笔记33:指针数组
除了创建整型数组一样,也可以声明指针数组。 int *api[10];为了弄清这个复杂的声明,我们假定它是一个表达式,并对它进行求值。下标引用的优先级高于间接访问,所以在这个表达式中,首先执行下标引用。因此,a…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...