Итерации по изображениям в нескольких каталогах с вложенными циклами for, n-й цикл повторяет последний элемент предыдущего цикла - Python

Мне было поручено переместить qc-изображения нескольких грузовых перевозок на слайды ppt в определенном формате, и я столкнулся с несколькими проблемами. Во-первых, загруженные изображения не находятся в той же последовательности, что и в каталогах и подпрограммах. Это важно, поскольку они сохраняются в папках в правильном порядке. Это также заставило их заполнять слайды с обратными координатами. Моя вторая и самая большая проблема заключается в том, что первый слайд имеет 4 уникальных изображения, но каждый последующий слайд начинается с того же изображения, которое использовалось последним на предыдущем слайде, то есть:

  • слайд 1 = img00, img01, img02, img03
  • слайд 2 = img03, img04, img05, img06
  • слайд 3 = img06, img07, img08, img09

Как я могу перебирать файлы и добавлять их на слайды без дублирования в начале каждого цикла? У меня есть что-то подобное, если я не в состоянии, но это нарушает код. В его нынешнем виде он будет создавать слайды и добавлять изображения, но не очень хорошо. Некоторые из других ответов на аналогичные вопросы касались того, как создавать лучшие циклы и как добавлять / удалять повторяющиеся элементы из списков, но не касались того, как перебирать элементы, не касаясь одного и того же элемента дважды. Любая помощь приветствуется.

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()
       

1 ответ

Решение

Попробуйте изменить цикл изображения на следующий

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')
Другие вопросы по тегам