前面我们对PPT进行了一定的操作,并将其中的文字提取到了word文档中。现在就让我们来刷几道题巩固巩固吧!


《Python趣味工具》——ppt的操作(刷题版)-LMLPHP



1. 查看PPT(上)

由于期末复习的课程很多,每个课程中又包含了一些PPT,小何想能不能通过 input() 函数,实现个性化交互,让同学们通过输入PPT的名称就可以一键提取出对应的文本并写入Word文档呢🤔

那我们通过三道题实现这个功能吧,在本题中,你需要做的是:通过 input() 函数输入 PPT 的页码,就可以找到该页码对应的形状数。

解题步骤:

  1. 读取指定PPT的幻灯片页;

  2. 使用 input() 函数让用户输入 PPT 的页码(这份PPT只有91页哦);

  3. 将输入的页码减去 1 ,作为幻灯片页序列的索引值,并访问其 .shapes 属性;

  4. 格式化字符串输出"第{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页码来获取该页码下面全部的文本内容吧🤔

解题步骤:

  1. 读取指定PPT的幻灯片页;

  2. 使用 input() 函数让用户输入 PPT 的页码(这份PPT只有91页哦);

  3. 将输入的页码减去 1 ,作为幻灯片页序列的索引值;

  4. 访问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中的文本框,并赋值给变量textFrame
        textFrame = shape.text_frame
              
        for para in textFrame.paragraphs:
            
            for run in para.runs:
            
        # 读取文本框中的文本内容,并赋值给变量texts
                texts=run.text
        
        # print()输出texts
                print(texts)

3. 查看PPT(下)

我们在前面已经实现了输入PPT的页码,就能找到该页码对应的形状数以及获取该页码下全部的文本内容等功能,那么本次我们就来实现我们的最终目标吧!🥳通过input() 函数输入PPT名称,一键提取出对应的文本并写入Word文档

解题步骤:

  1. 新建一个空白的 Word 文档;

  2. 使用 input() 函数让用户输入 PPT 的名称;

  3. 访问输入名称的 PPT 中每一页样式块文本内容,使用 add_paragraph() 函数添加文案内容到文档当中;

  4. 将 Word 文档至指定路径。

保存路径:/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中的文本框,并赋值给变量textFrame
            textFrame = 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的总页码数。

示例代码如下:

# 使用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下的全部文本内容。

解题步骤:

  1. 使用 input() 函数让用户输入 PPT 的名称;

  2. 通过"+“,拼接文件路径;
    文件路径:文件夹路径+”/“+输入名称+”.pptx"

  3. 访问输入名称的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属性,赋值给shape
    for shape in slide.shapes:
    
        # 判断每个shape中是否有文本框
        if shape.has_text_frame:
        
            # 读取单个shape中的文本框,并赋值给变量textFrame
            textFrame = shape.text_frame
            
            # 读取文本框中的文本内容,并赋值给变量texts
            texts = textFrame.text
            
            # print()输出texts
            print(texts) # 有的文件只能这样输出,不用run

6. 查找重复页

由于很多PPT在制作时不小心会存在重复页,小何想能不能通过什么办法快速找出来PPT当中有哪两页是重复的呢🤔

那让我们一起来实现这个功能吧,在本题中,你需要做的是:

  1. 读取指定路径的PPT;

  2. 以幻灯片页为单位,将文本全部提取出;

  3. 定义一个新字典添加键值对,页码为键对应的值为本页文本内容;

  4. 接下来进行逐页查找,如果查找内容与指定内容相同,并且页码不相同,就格式化字符串输出"第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:

    # 定义一个空字符串textSlide
    textSlide=""
    
    # for循环遍历slide中.shapes属性
    for shape in slide.shapes:
    
        # 判断单个shape中是否有文本框
        if shape.has_text_frame == True:
        
            # 把单个形状下的全部文本赋值给变量texts
            texts = shape.text
            
            # textSlide累加texts
            textSlide+=texts
            
    # 向字典dict_all添加键值对,pageNumber为键,对应值为textSlide
    dict_all[pageNumber]=textSlide
    
    # pageNumber累加1
    pageNumber += 1

# 变量i设置为1
i = 1

# while循环如果i<13
while i<13:

    # 变量check_k设置为i
    check_k=i
    
    # check_v设置为dict_all[i]
    check_v=dict_all[i]
    
    # for循环遍历dict_all.items(),并赋值给key, value
    for key,value in dict_all.items():
    
        # 如果value等于check_v
        if value==check_v:
        
            # 如果key小于check_k
            if key<check_k:
            
                # 格式化字符串输出
                # f"第{key}页和第{check_k}页重复"
                print(f"第{key}页和第{check_k}页重复")
                
    # i累加1
    i += 1

7. 用代码写首小诗

刚学完如何用 Python 将文字写入 Word 文档的你快来写一首小诗送给秋天吧!

文案内容为:

月落乌啼霜满天
江枫渔火对愁眠
姑苏城外寒山寺
夜半钟声到客船

你需要完成:

  1. 新建一个空白的 Word 文档;

  2. 使用 input() 函数输入诗句;

  3. 使用 add_paragraph() 函数添加文案内容到文档当中;

  4. 将 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的操作(刷题版)-LMLPHP

10-02 06:06