故事背景是这样的,某一天师兄突然交给一项任务。虽然他吧啦吧啦地说了一堆,但是简单总结起来就是现在有个一千页的PPT和一个一千行的txt文档,要做的事情就是把txt文档中的一千行文字按顺序分别输入到对应的每一页PPT中。所以操作起来完全没有任何技术含量,完全就是苦力劳动。所以在了解清楚需求之后,脑海中大致就两种想法:

老老实实地手工操作

编写脚本实现自动化操作

然后无论选择哪种方法,最根本的目的还是要争取花费最短的时间来完成任务。考虑到并不清楚 Python 是否具有可以解析 PPT 的第三方模块,另外即便有也还存在学习的时间成本,因此我首先选择手动操作,准备先完成前100页的操作以统计一个时间进行评估。

一通无意识的手工复制粘贴之后,发现手工操作100页就需要花费30分钟!!!所以如果要全部手工操作就需要花费300分钟时间,而且这还是我在之后能始终保持和开始一般的高效率状态。简单思考了一下之后,对手工操作实在感到绝望,于是开始探索方案二——脚本自动处理的可能性。先做一个简单的分析,脚本要做的事情就是将 txt 文档中的文字逐行获取,然后在 PPT 文件中逐页地在特定位置添加文本框,然后添加对应文字。而 Python 遍历操作 txt 文档是最基本的文件操作,但是 Python 是否有能遍历操作 PPT 的模块支持则不得而知。不过所幸,在一番检索工作后,惊喜地发现了 python-pptx 模块。

据 python-pptx 官网介绍:

python-pptx is a Python library for creating and updating PowerPoint (.pptx) files.

... ...

Round-trip any Open XML presentation (.pptx file) including all its elements

Populate text placeholders, for example to create a bullet slide

Add textbox to a slide; manipulate text font size and bold

... ...

这就是说呢,python-pptx 支持创建和更改 pptx 文件,支持往 pptx 中插入文本框添加文字的操作。所以说这个模块所提供的支持非常符合我的需求,不过我当前并没有时间把该模块进行完整的学习,需要的是能快速完成任务。所幸文档中也给出了一些简单操作的样例。因此在浏览了几个样例之后,我掌握了如何打开与保存 PPT 对象(Presentation),以及如何遍历 PPT 页面(slides)和往页面中插入文本框(textBox)这个 API 的简单使用之后,成功写下了如下代码实现了自己的任务需求:

from pptx import Presentation

from pptx.util import Inches, Pt

prs = Presentation('webvision-stage2.pptx')

pages = 0

left = Inches(4)

top = Inches(1.1)

width = Inches(5)

height = Inches(0.5)

names = []

with open('synsets.txt') as f:

for line in f:

names.append(line[10:-1])

for slide, name in zip(prs.slides, names):

pages += 1

if pages < 114:

continue

txBox = slide.shapes.add_textbox(left, top, width, height)

tf = txBox.text_frame

tf.text = name

prs.save("webvision-stage2-result.pptx")

从调研脚本实现的可行性到完成脚本编写、调试与实现又花了差不多30分钟,然后脚本运行1分钟不到就把任务实现了。当然,作为一个富有责任心的人,在跑完脚本之后,我还花了将近20分钟的时间将每一页都浏览了一遍,在确保无误后才将结果反馈给师兄。所以最终总的花费了将近90分钟时间来完成这项任务,相比于预计的纯手工的300+分钟,Python 的脚本确实大大提高了工作效率。

当然这还只是对 python-pptx 模块的一个简单应用,python-pptx 还可以用于利用所给出的数据直接生成 PPT 或者往 PPT 中插入表格、图片等。

相关参考

python快速处理ppt_人生苦短,我用 Python 之快速遍历 PPT相关推荐

  1. python c 语言接口,## 人生苦短我用python[0x08] 使用ctypes调用c语言接口 ##

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 1.背景 python作为解析语言大规模应用在各个领域,c语言作为系统级别的语言广泛应用在基础,系统,网络等底层服务当中, ...

  2. python词云图_人生苦短我用Python——词云图的绘制

    1.wordcloud库的安装 wordcloud库可以绘制词云,安装wordcloud库: pip install wordcloud 2.wordcloud库的介绍 wordcloud库的基本使用 ...

  3. 人生苦短我用python壁纸_人生苦短我用Python分分钟下载知乎美图给你看

    为什么说"人生苦短,我用python"? 为什么说人生苦短我用python Question 1 Python是什么 2 人们为什么用Python 3 Python是脚本语言吗 P ...

  4. python爬虫怎么挣钱-月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!...

    想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...

  5. python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...

    一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...

  6. python就业需要的技能_教你如何快速掌握Python就业技能

    -人生苦短,为什么要学Python? 简单易学 应用广泛 大厂青睐 (油管大神评选的2020最值得学就业语言-Python) 因为以上的种种理由,无论是国外还是国内, Python都荣登2020最值得 ...

  7. 人生苦短,似乎python也解决不了人到中年的问题

    人生苦短,似乎python也解决不了人到中年的问题 感觉人一过了30岁,这时间就像原来的涓涓细流,变成洪水猛兽,越来越快,对于一个80后来说,仿佛社会上所有的一切,都在渐渐遗忘你,从不停的得到,到不断 ...

  8. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 文章来源:公众号"睿江云计算" 继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一 ...

  9. python精通书籍-清华学霸整理,Python入门到精通这几本书帮你快速入行

    今天我来为大家分享十本不可错过的Python好书,分别适合入门.进阶到精深三个不同阶段的人来阅读. Python高性能编程 Amazon 五星畅销书. Python 入门进阶必读. Python代码仅 ...

最新文章

  1. 一个hadoop hdfs put 文件失败的小情况
  2. 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下
  3. python数据预测模型算法_如何对时间序列预测问题计算基准预测(python)
  4. 项目--------------使用BiLSTMCRF将病例文本中的诊断数据识别出来
  5. python向mysql中添加数据_Django save()方法不向Mysql数据库插入数据
  6. JBox2D手机游戏引擎介绍(附jbox2d官网网址)
  7. 《Windows Phone 7 用户界面设计和交互指南 v2.0》
  8. Your connection is not private Attackers might be trying to steal your information from nemertes.lis
  9. 为了学习Python,我汇总了这10个免费的视频课程!
  10. SEO之关键词的选择
  11. 修改ubuntu终端显示目录和计算机名称(转)
  12. 网盘搜索引擎原理大揭秘
  13. 流程管理体系实施策略
  14. 【雕爷学编程】Arduino动手做(69)---GY-30环境光传感器
  15. 云原生背景下的运维价值思考与实践
  16. 10款热门的企业报表工具软件,该如何选择?
  17. 【工业视觉】Halcon常用教程
  18. C语言——文件操作及常见问题
  19. java warmup,20. dubbo源码-预热warmup过程
  20. 递归算法转换为非递归算法

热门文章

  1. UI进阶--Quartz2D和触摸事件的简单使用:简易涂鸦板
  2. MFC SDI 中 通过注册表保存当前窗体的 显示状态位置
  3. Linux的追逐,Windows的穷途恼指日可待
  4. Winform中FormClosing与FormClosed区别与使用
  5. 在C++中调用DLL中的函数
  6. C语言找出4个最大和4个最小数,济南大学C语言程序设计教案:C语言实验课程第四课.doc...
  7. 软件质量保证计划_如何做好软件项目的质量管理?
  8. java手动提交事务_Mybatis是如何将事务和连接池高效的结合的
  9. VirtualBox中ubantu虚拟机与主机进行复制粘贴
  10. tf.slice解析