《Python趣味工具》——ppt的操作(1)

这篇具有很好参考价值的文章主要介绍了《Python趣味工具》——ppt的操作(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面我们学习了如何利用turtle模块制作emoji,今天来看看PPT的相关操作:


《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言


小L想要把 PPT 中的文本全部粘贴到 Word 文档中,该怎么办,一页一页的复制粘贴么,emmm,想想都很麻烦,还是交给Python吧!

即要把 PPT 中的文本内容读取出来,再写入 Word 文档中。

我们想要使用 Python 读取 PPT 中的文字,首先应该清楚 PPT 的基础结构,这样对之后代码的编写很有帮助。

此处我们以 PowerPoint 软件为例,进行讲解和演示。


一、PPT的基础结构:

1️⃣一个 PPT 就是一个演示文稿(Presentation)。

2️⃣演示文稿由页组成,每一页叫做幻灯片页(Slide)。

3️⃣幻灯片页由形状(Shape)组成。

  • PPT 中提供了各种样式的形状,线条、箭头、矩形、基本形状、共识形状等。

4️⃣通过是否含有文本(text),形状可以分为两类:

  • 一类是含有文本框的形状
  • 另一类是无文本框的形状(纯图片)

5️⃣一个文本框可以看作是小的 Word 文档,其中的每一段内容叫段落(Paragraph)。

注意哦,空行也是段落。

段落之中的内容可以具有不同的样式。

  • 常见的样式有:字体、字形、字号、字体颜色、下划线、删除线、上标和下标等。

6️⃣我们把具有相同样式的基本单元可称为一个样式块(Run)。

例如,在段落中有一个高亮的字,那么这个字就形成了一个样式块。字的左右两边被分割成了新的样式块。所以,段落中就有三个样式块。

将 PPT 中的结构按照层级关系来排列是这样的:

幻灯片页 -> 形状 -> 文本框 -> 段落 -> 样式块


二、PPT的相关操作:

1. 导入pptx模块

在了解了 PPT 文件的基础结构后,接下来就要使用 Python 读取内容。

首先,我们要安装 python-pptx 模块,它可以读取和修改 .pptx 文件,不支持.ppt文件。

python-pptx 不是一个内置模块,所以在使用前要先通过代码
pip install python-pptx 在终端上进行安装。

如果在自己电脑上安装不上或安装缓慢,可在命令后添加
pip install python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple/
进行加速。

安装完成后,下一步就是导入这个模块;

我们只需要使用 python-pptx 模块中的 Presentation 类,这里要用到 from...import...

需要注意的是,这里是 from pptx import Presentation,而不是
from python-pptx import Presentation。

# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation

2. ppt的基本操作:

由于 PPT 有多级结构,想要得到所有的文字内容,那就要从头开始层层读取。

第一步,读取文件;
第二步,读取指定幻灯片页;
第三步,读取指定形状;
第四步,读取文本框内的文本内容。


1️⃣调用 Presentation() 函数,读取指定路径,相当于打开了一份 .pptx 文件,并返回一个 Presentation 对象。

from pptx import Presentation
path = "/Users/shop.pptx"
pptxFile = Presentation(path)
print(pptxFile)

本例中,将 .pptx 文件的绝对路径以字符串格式赋值给变量 path,再将变量 path 作为参数传入 Presentation() 函数中。


2️⃣读取 .pptx 文件后,我们可以访问 Presentation 中的 .slides 属性,获取幻灯片页序列。

slide = pptxFile.slides

幻灯片页序列中包含所有幻灯片页对象,可以使用索引定位到单个幻灯片页对象;

  1. 获取PPT第一张幻灯片页对象:
slide = pptxFile.slides[0]
  1. 也可以使用 for 循环读取所有幻灯片页对象。
# for循环遍历pptxFile中.slides属性,并赋值给slide
for slide in pptxFile.slides:
    # print()输出slide
    print(slide)

使用 for 循环遍历 Presentation 对象中 .slides 属性,并赋值给变量 slide,这样就可以读取到 .pptx 文件中每个幻灯片页对象。


3️⃣在获取了全部幻灯片页对象后,接下来就要读取其中的形状。

我们可以访问幻灯片页对象中的 .shapes 属性,获取形状序列。

案例中的代码,只读取了第一页幻灯片中的所有形状。

slide = pptxFile.slides[0]
shape = slide.shapes

由于形状包含在幻灯片页中,在这里我们需要使用嵌套循环,读取每一页幻灯片中的每一个形状。

# for循环遍历pptxFile中.slides属性,并赋值给slide
for slide in pptxFile.slides:
    # for循环遍历slide中.shapes属性,赋值给变量shape
    for shape in slide.shapes:
        # print()输出shape
        print(shape)

4️⃣我们通过代码读取到每个幻灯片页中的每一个形状,接下来要获取其中的文本框。

思考一下,是不是每个形状中都有文本框呢?
《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言
哈哈!并不是哒哒哒哒哒哒哒哒哒哒哒哒dadadada!!!

《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言

形状可以按照是否含有文本分为两类,一类是含有文本框的形状,另一类是纯图片的形状。

所以,我们要将纯图片的形状排除,再从文本框中提取文字内容。

这段代码可以判断形状内是否有文本框,然后读取文本框对象。

if shape.has_text_frame == True:
    texts = shape.text_frame

访问形状对象中的 .has_text_frame 属性,判断形状中是否存在文本框,返回布尔数。

与 if 语句相结合,如果形状中存在文本框,就执行接下来的操作。


5️⃣在获取了文本框对象后,要读取文本框内的文本内容,需要通过 .text 属性访问。

访问形状中的 .text_frame 属性,获得文本框对象。

  # print()输出textFrame.text
            print(textFrame.text)

终于把 .pptx 文件中的文本内容提取出来了,不错不错🎉


6️⃣接下来,就应该把文本内容全部写入 Word 文档中。

在这里,我们需要知道一个小规则,就是写入 Word 文档的内容样式要保持一致。

也就是说,一段文本内容为一个样式块,就可以写入 Word 文档。如果一段文本内容包含多个样式块,写入 Word 文档时,就可能发生报错。

由于我们以文本框为单位提取文本内容,文本框内有段落,段落中含有不同的样式块,就这样写入 Word 文档,程序会报错。

在这里,要以样式块为最小单位提取文本内容,再把每个样式块写入 Word 文档中。

刚才我们获取了文本框对象,再往下一层读取,需要访问 .paragraphs 属性,返回文本框中的段落序列。

案例中的代码,读取了第一页幻灯片第一个文本框中的所有段落。

textFrame = shape.text_frame
paragraphs = textFrame.paragraphs

要获取每个文本框内的每个段落,就需要使用 for 循环遍历文本框的 .paragraphs 属性。

 # for循环遍历slide中.shapes属性,赋值给变量shape
    for shape in slide.shapes:
        # 判断形状中是否有文本框
        if shape.has_text_frame == True:
            # 读取形状中的文本框,并赋值给变量textFrame
            textFrame = shape.text_frame
        
            # for循环遍历文本框内的所有段落
            # 赋值给变量paragraph
            for paragraph in textFrame.paragraphs:
                # print()输出paragraph
                print(paragraph)

7️⃣获取了所有段落对象后,接下来就访问段落对象的 .runs 属性,就可以获得段落中的样式块序列。

在案例中,读取了第一页幻灯片第一个文本框第一个段落中的所有样式块。

from pptx import Presentation

path = "/Users/shop.pptx"
pptxFile = Presentation(path)

slide = pptxFile.slides[0]
shape = slide.shapes[0]
textFrame = shape.text_frame
paragraph = textFrame.paragraphs[0]

runs = paragraph.runs

接下来,for 循环遍历段落的 .runs 属性,赋值给变量 run;访问段落对象的 .runs 属性,就可以获得段落中的样式块序列。


8️⃣使用 .text 属性读取出样式块对象的文本内容。

  # for循环遍历段落中的所有样式块
                # 赋值给变量run
                for run in paragraph.runs:
                    # 读取样式块中的文本内容,并赋值给变量texts
                    texts = run.text
                    # print()输出texts
                    print(texts)

太好了,终于通过层层读取,获得了每个样式块中的文本内容<( ̄︶ ̄)>
《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言


三、总结:

今天我们通过读取样式块,访问其 .text 属性,获得了以样式块为单位的文本内容。

这不是提取 .pptx 文件中的文本内容的唯一方式,我们要根据不同的需求采取不同的操作。

层层读取 .pptx 文件需要嵌套循环,理清楚 PPT 的结构,就可以避免出 bug 啦~

小提示:复数结尾的属性,例如 .slides,获取的都是序列,我们可以通过索引和遍历,得到单个对象。

《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言


四、 完整源码:

# 使用from...import从pptx模块中导入Presentation
from pptx import Presentation

# 将.pptx文件路径赋值给变量path
path = "/Users/xiaohe/statistics.pptx"

# 读取path并赋值给变量pptxFile
pptxFile = Presentation(path)

# for循环遍历pptxFile中的.slides属性,赋值给slide
for slide in pptxFile.slides:

    # for循环遍历slide中.shapes属性,赋值给变量shape
    for shape in slide.shapes:
        # TODO 判断形状中是否有文本框
        if shape.has_text_frame==True:
            # TODO 读取形状中的文本框,并赋值给变量textFrame
            textFrame=shape.text_frame
            
        
            # TODO for循环遍历文本框内的所有段落
            # 赋值给变量paragraph
            for paragraph in textFrame.paragraphs:
                
            
                # TODO for循环遍历段落中的所有样式块
                # 赋值给变量run
                for run in paragraph.runs:
                    # TODO 读取样式块中的文本内容,并赋值给变量texts
                    texts=run.text
                    print(texts)
                    # TODO print()输出texts
                    

呜呜~ 本周就这样了,最近没时间写了~ ~ ~😢😢😢
《Python趣味工具》——ppt的操作(1),《Python项目实战》,python,powerpoint,开发语言文章来源地址https://www.toymoban.com/news/detail-731526.html

到了这里,关于《Python趣味工具》——ppt的操作(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python入门教程+项目实战-11.3节: 元组的操作方法

    目录 11.3.1 元组的常用操作方法 11.3.2 元组的查找 11.3.3 知识要点 11.3.4 系统学习python 元组类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法,在本节的内容中,着重介绍元组类型的操作方法。 元组是一种不可变的数据类型,不可以元组执行修改等操作,在

    2023年04月26日
    浏览(42)
  • 【Python数据科学 | 11】应用实战:我的第一个开源项目-基金定投回测工具

    这是机器未来的第60篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127712752 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念 【Python数据科学快速入门系列 | 02】创建ndarray对象的十多种方法 【Python数据科学快速入门系列 | 03】玩转数据摘取:Numpy的索引

    2024年02月02日
    浏览(103)
  • 《Python趣味工具》——文字RPG游戏的开发(附人生选择模拟器的详细讲解及其他多种RPG游戏的源码)

    今天我们来学习如何制作一个 文字RPG 游戏 。 内容主要分为3个部分: part1. 文字游戏( MUD )的趣味历史 part2. 文字游戏的设计方法 part3. 文字游戏功能实现 你知道国内首款很火的文字游戏是哪个大V写的吗? 你知道国内文字游戏界的活化石是什么吗? 一起来看看吧~~ 早期

    2024年02月19日
    浏览(46)
  • 开学了软测的同学也该跟上了--selenium介绍+简单操作,Python实战项目视频

    什么时候开始自动化测试? 功能测试完毕(手工测试)》》》web UI自动化 自动化测试的优缺点: 优点: 较少的时间内运行更多的测试用例; 自动化脚本可重复运行 较少人为的错误; 测试数据存储 缺点: 不能取代手工测试; 手工测试比自动化测试发现的缺陷更多; 测试

    2024年04月26日
    浏览(41)
  • 用Python操作PPT的办公自动化教程

    PPT通过其精美的可视化技巧以及良好的演示效果,成为了职场人士的必备技能。PPT的设计是一门大学问,无论是设计技巧,还是操作方法,都衍生出了专门的课程。 主要介绍Python操作PPT的技巧, 编程的优势在于处理速度,对于高大上的PPT设计,还是需要\\\"以人为本, 所以该模

    2024年02月12日
    浏览(50)
  • Python操作PPT:轻松创建、编辑和展示幻灯片

    引言: 在现代办公环境中,演示文稿已经成为一种常见的沟通工具。然而,使用传统的PowerPoint软件创建和编辑幻灯片可能会耗费大量的时间和精力。幸运的是,Python作为一种功能强大的编程语言,提供了许多库和工具,可以帮助我们更高效地操作PPT文件。本文将介绍如何使

    2024年01月21日
    浏览(41)
  • 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器获取某东数据

    最近都没啥时间,很久没更新了。 今天分享一下,如何用selenium识别验证码,实现自动登录以及获取数据。 目标:某东 话不多说直接开始 环境 Python 3.10 Pycharm 模块使用 import random import time from selenium import webdriver import pyautogui import base64 import ddddocr import csv win + R 输入cmd 输入安

    2024年02月04日
    浏览(47)
  • 如何使用 PowerPoint 2021 制作演示文稿(PPT)?

    软件安装: 办公神器office2021安装教程,让你快速上手_正经人_____的博客-CSDN博客   引言         PowerPoint 是一款非常常用的演示文稿制作工具,它可以帮助您创建漂亮的幻灯片,展示您的想法和信息。如果您是 PowerPoint 的新手,下面是一些入门指南,以帮助您使用 Powe

    2024年02月10日
    浏览(57)
  • PPT怎么转PDF?将Powerpoint(PPT)转换为PDF方法分享

    当您在PowerPoint中创建精美的演示文稿时,您不仅想给观众留下深刻的印象,还希望它能够方便地打包,并且文件格式起着重要作用。虽然PPTX是一种广泛传播的格式,但PDF始终是一个安全的选择。以下是有关如何使用在线工具将PowerPoint演示文稿转换为PDF的简要指南. 术语“可

    2024年02月06日
    浏览(49)
  • C#使用Microsoft.office.interop.PowerPoint生成PPT

    开发的一个系统需要用到自动生成ppt,网上的例子比较少,且有很多还需要csdn币下载,有些下载下来了还不是那么回事,就是个坑。后来考虑了开源组件Apose.Slides和Spire.Presentation,但是这两个都是商业软件,试用版和免费版的只有能生成前10页,还带有水印。Free Spire.Presentat

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包