用Python玩转PPT!
作者 | 陈熹
来源 | 早起Python
今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位——PPT。
安装
pptx是一个非标准库,需要在命令行中安装
pip install python-pptx
要注意,安装的时候是python-pptx,而实际调用时均为pptx。这里和docx模块相同。
前置知识
1. 基本结构
再看一下ppt结构组成,会较word复杂许多。当然这也跟ppt的高度自定义拓展性有关
简单来说,一个PPT文件为presentation,基本的结构为展示文件presentation-幻灯片页slide-形状shape组成,形状就需要区分开,是包含文本的形状还是不包含文本的形状(纯图片等)。
如果是包含文本的形状,则可以获取内部的文本框,一个文本框又可以看作是一个小的word文档,包含段落paragraph - 文字块run
现在对Office三件套的结构组成做一个小总结????
2. 模板和占位符
如上图所示,通过幻灯片母版我们可以预设好各种各样的版式,后面新建幻灯片的时候只需要点击版式就可以一键生成所需的基本格式。
接着说说占位符Placeholder
占位符已经完成了样式设置,包括字体、字号、颜色等等,在特定占位符内输入文字可直接转化为特定的样式。
3. 创建 PPT 文件的基本思路
创建一个 PPT
从幻灯片母版中确定一个版式
在不同的占位符中填写不同的内容
添加图片、表格等额外内容
对样式进行修改
Python读取PPT
1.打开PPT文件
from pptx import Presentation# 这里给出需要打开的文件路径file_path = r'...'pptx = Presentation(file_path)
2. 获取幻灯片页
用pptx.slides可以获得一个列表,包括所有的幻灯片页slide 对象。
for slide in pptx.slides: print(slide)
3. 获取形状
只要熟悉了类似 Excel 和 Word 的多级结构, PPT 的结构就很好理解了。每一个幻灯片页都有一个或者多个形状shape。
for slide in pptx.slides: for shape in slide.shapes: print(shape)
4. 获取文本框内容
要获取文字内容,很容易就联系到文字在形状 shape 的下级结构了 从 Word 中的学习我们也可以推知,文字的承载单位是 段落 paragraph和文字块 run。
很自然可以想到用下列的代码获取文字。
for slide in pptx.slides: for shape in slide.shapes: for paragraph in shape.paragraphs: print(paragraph.text)
或者
for slide in pptx.slides:for shape in slide.shapes:for paragraph in shape.paragraphs:for run in paragraph.runs:print(run.text)
但这里出现了一个问题:每个形状里一定有文字吗?
从上图可以看到,蓝色椭圆的形状里是没有任何文字的,中间的大虚线框有文字。
一个形状中有没有文字,关键就在于它有没有包含文本框text_frame,下面是与文本框有关的操作:
shape.has_text_frame 判断形状中是否有文字框
shape.text_frame 获取文字内容
在PPT中,文字框才是文字的载体,因此获取文字的代码如下:
for slide in pptx.slides: for shape in slide.shapes: if shape.has_text_frame: text_frame = shape.text_frame print(text_frame.text)
到这里,我们需要对先前对 PPT 结构的认识进行修正:
5. 获取段落和文字块
每一个文本框都可以看成是一个小的 Word 文件,里面有段落和文字块两级结构:
for slide in pptx.slides: for shape in slide.shapes: if shape.has_text_frame: text_frame = shape.text_frame for paragraph in text_frame.paragraphs: for run in paragraph.runs: print(run.text)
写入 PPT
创建全新 PPT 的代码可以类比创建 Word 文件的代码,实例化的过程中不给予具体路径则为创建空白文件。
1. 创建幻灯片页
其中占位符编号是区分占位符的依据,也是写入内容的依据。
2. 往占位符填写内容
指定占位符编号就可以在具体位置写入特定内容。
slide.placeholders[占位符编号].text = '...'
修改 PPT 样式
1. 段落样式修改
可以同python-docx模块对段落样式的导入进行类比。
具体的方法上二者也有很多相似:
.add_run():添加新的文字块
.line_spacing:段内行间距
.runs :段落内的所有文字块
.space_after :段后距
.space_before :段前距
2. 文字样式修改
文字样式方法和 Word 中的使用是相同的:
.font.name :字体名称
.font.bold :是否加粗
.font.italic :是否斜体
.font.color :字体颜色
.font.size:字体大小
但有一个地方需要加以区别:在python-pptx中,使用文字样式方法是基于段落,也就是paragraph.font.xxxx, 而在python-docx中,使用文字样式方法是基于文字块。
以就是对 python-pptx模块操作PPT的常见方法总结,处理日常办公绝对没有问题,更多详细的代码可以查阅官方文档。
学完了这篇Python操作PPT之后,有关Python操作Word、Excel、PPT、PDF的基础就全部讲解完毕,之后我们会继续更新使用这些工具实现自动化办公的案例,如果你还不知道具体该如何应用,下面这些案例可能会有所帮助:
Python办公自动化从PPT到Word
Python办公自动化从Word到Excel
Python办公自动化从Excel到Word
更多精彩推荐
AI视觉大牛朱松纯担任北大AI研究院院长,提出通过构建大任务平台走向通用AI
可租赁、可定制的虚拟人居然还能这么玩?9月25日来百度大脑人像特效专场一探究竟!
倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行
让图片动起来,特朗普和蒙娜丽莎深情合唱《Unravel》
面试一家公司俩不同岗位、技术经理只问婚姻经历:那些奇葩的面试经历
相关文章:

贝塞尔曲线学习
贝塞尔曲线是UIkit中的一个关于图形绘制的类 贝塞尔曲线可以绘制矩形,圆形,直线,曲线,以及它们的混合图形。 系统常用的内置方法 // 创建基本路径 (instancetype)bezierPath; // 创建矩形路径 (instancetype)bezierPathWithRect…

巧用CSS的 Mask 滤镜
作者:冯永曜在网页制作中使用CSS,这已是众所周知,而关于CSS滤镜使用的却介绍得不多。其实,0CSS的滤镜在Dreamweaver3中用起来也很方便,且能使文字产生一种类似图象的效果,但比起图片来可就瘦小多了。不信&a…

Google Analytics功能篇 - 如何跟踪邮件打开率与点击率
有些朋友总会问我,在作邮件营销时,应该如何来跟踪这些流量呢?以便能知道发送的成功率,打开率,点击邮件中的链接数量,怎么实现这样的功能呢? 另外,有一个做邮件群发的朋友给我说&…
Google排名第一的技术,引数十万人关注!网友:差点我就放弃了!
毋庸置疑,Python越来越被认可为程序员新时代的风口语言。无论是刚入门的程序员,还是年薪百万的 BATJ 的大牛都无可否认:Python的应用能力是成为一名码农大神的必要项。 所以,很多程序员把Python当做第一语言来学习。 但对于Python…

python的zip函数
zip()函数 它是Python的内建函数,(与序列有关的内建函数有:sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列(列表)对象,reversed()、enumerate()返回一个迭代器(类似序列) 1 >>> type(sorted(s)) 2 <…

Nginx 搭建负载均衡
1.其实我这里并不是访问量很大,主要用于版本升级和维护而搭建的 2.忽略nginx安装和jetty的安装配置,我是在一台Linux服务器上装了两个jetty服务,部署两套jetty服务很简单,其实改改jetty.sh 脚本即可 JETTY_HOME/opt/jetty2/ JETT…

巧用CSS的Glow滤镜
作者:冯永曜对一个对象使用“glow”滤镜后,这个对象的边缘就会产生类似发光的效果,这种效果在PHTOSHOP中做起来都比较麻烦,而在DW3中用CSS的“glow”滤镜来制作却是如此地简单,而且节约不少字节。“glow”滤镜只有两个…
10大经典排序算法,20+张图就搞定
作者 | 李肖遥来源 | 技术让梦想更伟大冒泡排序简介冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序。复杂度与稳定性思路原理以顺序为例从第一个元素开始一…

C# MoreLinq 扩展安装
为什么80%的码农都做不了架构师?>>> http://blog.csdn.net/lee576/article/details/42716905 MoreLinq是一个对Linq to object的扩展类库,它是一个开源项目(http://code.google.com/p/morelinq/source/browse 天朝已对google全力封禁,所以要翻墙)&#…

IOS学习博客不错的大部分是原创
http://blog.csdn.net/iukey/article/category/955062

巧用CSS的Light滤镜
作者: 冯永曜Light滤镜能产生一个模拟光源的效果,但使用它要通过调用它的“方法(Method)”来实现,这就要用到一些Javascrpt知识,虽然有一点难度,但产生的效果也是奇特的,你看看下面的…

没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?
作者 | Just 出品 | AI科技大本营(ID:rgznai100) 从互联网金融公司转变为金融科技公司,品牌升级后的360数科强化了“科技”的外衣。 在近期的首个360数科技术开放日,360数科CEO吴海生表示,他们已经做好金融科技的最佳…

react构建淘票票webapp,及react与vue的简单比较。
前言 前段时间使用vue2.0构建了淘票票页面,并写了一篇相关文章vue2.0构建淘票票webapp,得到了很多童鞋的支持,因此这些天又使用react重构了下这个项目,目的无他,只为了学习和共同进步! 项目技术栈 前端技术…
【机器学习】机器学习算法优缺点对比(汇总篇)
作者 | 杜博亚来源 | 阿泽的学习笔记「本文的目的,是务实、简洁地盘点一番当前机器学习算法」。文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此模型…

PLSQL developer 连接不上64位Oracle 解决办法
在64位Windows2003上安装Oracle后,用PLSQL developer去连接数据库出现报错: Could not load "……\bin\oci.dll" OCIDLL forced to…… LoadLibrary(……oci.dll) returned 0 原因: oci.dll是64位的…
Docker 使用教程
概括 Docker与传统虚拟机的区别 与传统虚拟机的区别 Docker的安装 的安装 Docker daemon , client , containerd 镜像与容器操作 容器运行配置 Docker网络配置 网络配置 Alpine Docker Image 制作自己的 Docker Image …

话说CSS滤镜
作者:http://www.swtv.com.cn/adjunct/nr/css/css.htmAlpha 透明层次:滤镜效果语法:STYLE"filter:filtername(parameter1,parameter2,parameter3...)"其中:filtername为滤镜的名称;parameter1,parameter2等为…
面向隐私AI的TensorFlow深度定制化实践
作者 | Rosetta团队出品 | AI科技大本营(ID:rgznai100)之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案。在这一篇文章中,我们进一步结合 Rosetta 介绍如何定制化改造 TensorFlow 中前后端相关组件…

”拿来搞笑“的大学生活
”拿来搞笑“这词,是我舍友对我说过好几遍,我才觉得这词用来形容我大学的生活再恰当不过了,感谢他送给我这个词。 下面就列一下我大学期间”拿来搞笑“的事情: —:无偿捐血400毫升。当时认为是一件微不足道的事情&…

巧用CSS的Border属性
。作者:冯永曜 来源:黄山村夫 制作过网页的人都有为画线而烦恼的经历,本文介绍的小技巧也许对你有所帮助。我们先来认识一下“Border”(画边框),它是CSS的一个属性,用它可以给能确定范围的HTML标…
阿里资深算法专家:如何突围大厂算法面试?
2020 届秋招,算法岗灰飞烟灭。最聪明的应届生 / 程序员 ,都在极度竞争中,面临着前所未有的激烈 PK 。学生因“内卷”而迷茫;初级程序员遇职业发展瓶颈而困惑...面对重重压力,苦不堪言。to do list 上写满计划ÿ…

乡下人最嘲笑城里人的16件事,无语了!
一、出门「taxi」,乘电梯上七楼的健身房,然后在跑步机上挥汗如雨。 二、半夜上网,去歌厅、舞厅,困了不睡觉。之后失眠,再吃安眠药。 三、管儿子叫「小兔崽子」,管宠物狗叫儿子。 四、挑最有特色的饭店吃…

2017浅谈面试(一)
2017给自己一个目标,制定一份计划,新的开始,跟随创业团队风险无处不在,不过还是要选好Boss。 2016一个煎熬,悲剧,没发工资的日子,一等就等了5个月,零散的就拿到了一个半月工资&#…
乘风破浪的PTM:两年来预训练模型的技术进展
作者 | 张俊林来源 | 深度学习前沿笔记专栏Bert模型自18年10月推出,到目前为止快两年了。它卜一问世即引起轰动,之后,各种改进版本的预训练模型(Pre-Training Model, PTM)与应用如过江之鲫,层出不穷。Bert及…

DW中CSS属性详解
作者:未知 来源:5D多媒体 在Dreamweaver的CSS样式里包含了W3C规范定义的所有CSS1的属性,Dreamweaver把这些属性分为Type(类型)、Background(背景)、Block(块)、Box&a…
第十周项目5:贪心的富翁
上机内容:用循环语句完成累加 上机目的:学会循环语句的使用 /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:孙锐 * 完成日期:2012 年 10 月 31 日 * 版 本 号&…

python requests返回的json对象用json.loads()时转为字典时编码变为了unicode
2019独角兽企业重金招聘Python工程师标准>>> 1.使用simplejson,loads的对象为str,否则还是会转码unicode import simplejson url "" payload {} headers {} r requests.post(url, datapayload, headersheaders)result simplej…

关于Dreamweaver乱码问题的解决方案
原作者:南宫彩虹出处:5D多媒体出现乱码,大致为两种情况: 一是没有标明主页制作所用的文字,这种情况下很简单就可以解决,在<HEAD>区加上<META http-equivContent-Type content"text/html; cha…
百度绝对控股,小度科技独立融资,投后估值200亿元
9月30日,百度宣布旗下智能生活事业群组业务(以下简称“小度科技”)完成了独立融资协议的签署,本轮融资由百度资本及CPE战略领投、IDG资本跟投,投后估值达约200亿元。作为百度的重要战略业务板块,百度公司对…

Android UI开发第二十五篇——分享一篇自定义的 Action Bar
Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar。在3.0之前是不能使用Action Bar功能的。这里引入了自定义的Action Bar,自定义Action bar也不是完全实现了 Action bar功能,只是在外形上相似。自定义Action bar没有…