Итерации по изображениям в нескольких каталогах с вложенными циклами 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')