首页 > 解决方案 > 在嵌套for循环的多个目录中迭代imagis,第n个循环重复前一个循环的最后一项 - Python

问题描述

我的任务是将几批货运的 qc 图片以特定格式移动到 ppt 幻灯片中,并且遇到了几个问题。首先,加载的图片与它们在目录和子目录中的顺序不同。这很重要,因为它们以正确的顺序保存在文件夹中。这也导致它们在幻灯片中以反坐标填充。我的第二个也是最大的问题是第一张幻灯片有 4 个独特的图像,但是之后的每张幻灯片都以与上一张幻灯片上使用的最后一张相同的图像开头,即:

如何在每个循环的乞求时迭代文件并将它们添加到幻灯片而不重复?我有类似于 if i not in condition 的东西,但这会破坏代码。就目前而言,它将创建幻灯片并添加图像,但效果不是很好。类似问题的其他一些答案已经解决了如何构建更好的循环,以及如何从列表中添加/删除重复的项目,但没有解决如何在不接触相同项目两次的情况下迭代项目。任何帮助表示赞赏。

import os
from os import listdir
from os import walk
from pptx import Presentation
from pptx.util import Inches, Pt
import math



prs = Presentation()
path='c:\\Users\\mainuser\\Pictures\\'

sub_dirs=[]
images=[]

for root,dirname,files in os.walk(path):
    sub_dirs.append(root)
    for file in files:
        if file.endswith('.jpg') or file.endswith('.png'):
            images.append(root+'\\'+file)


def create_title_slide():
    title_slide_layout=prs.slide_layouts[0]
    slide=prs.slides.add_slide(title_slide_layout)
    title=slide.shapes.title
    subtitle=slide.placeholders[1]

    title.text="Presentation Title"
    subtitle.text= "Subtitle text"

    prs.save('test.pptx')

def add_slides_with_pictures():

    blank_slide_layout = prs.slide_layouts[6]

    
    left = Inches(0)
    right= Inches(8)
    top = Inches(0)
    bottom = Inches(3)
    width = Inches(2)
    height = Inches(2)

    
    number_of_slides=round(len(images)/4)
   
                         
    for i in range(0,len(images),1):
        for n in range(number_of_slides):
            
   
            slide= prs.slides.add_slide(blank_slide_layout)

            pic00=slide.shapes.add_picture(images[0], left, top, width, height)

            i+=1
           
            pic01=slide.shapes.add_picture(images[i], right, top,width, height)
           
            i+=1
           
            pic02=slide.shapes.add_picture(images[i], right, bottom, width, height)
           
            i+=1
           
            pic03=slide.shapes.add_picture(images[i], left, bottom, width, height)
           
            i+=1

            prs.save('test.pptx')
            

def main():
    create_title_slide()
    add_slides_with_pictures()
       

标签: python-pptxos.pathnested-for-loop

解决方案


尝试将图像循环更改为以下

for i in range(0,len(images),4):  # each slide has 4 images
    slide = prs.slides.add_slide(blank_slide_layout)
    pic00 = slide.shapes.add_picture(images[i+0], left, top, width, height)
    pic01 = slide.shapes.add_picture(images[i+1], right, top,width, height)
    pic02 = slide.shapes.add_picture(images[i+2], right, bottom, width, height)
    pic03 = slide.shapes.add_picture(images[i+3], left, bottom, width, height)
prs.save('test.pptx')

推荐阅读