使用嵌套 for 循环遍历多个目录中的 imagis,第 n 个循环重复先前循环的最后一项 - Python
Iterating through imagis in multiple directories with nested for loops, nth loop repeats last item of prior loop - Python
我的任务是将几批货运的质量控制图片移动到特定格式的 ppt 幻灯片中,并且 运行 进入了几个问题。首先,加载的图片与目录和子目录中的图片顺序不同。这很重要,因为它们以正确的顺序保存在文件夹中。这也导致它们在幻灯片中以反坐标填充。我的第二个也是最大的问题是第一张幻灯片有 4 张独特的图片,但之后的每张幻灯片都以与上一张幻灯片中最后一张相同的图片开头,即:
- 幻灯片 1 = img00、img01、img02、img03
- 幻灯片 2 = img03、img04、img05、img06
- 幻灯片 3 = img06、img07、img08、img09
如何在每个循环开始时遍历文件并将它们添加到幻灯片中而不重复?我有一些类似于 if i not in condition 的东西,但这会破坏代码。就目前而言,它可以创建幻灯片并添加图像,但效果不是很好。类似问题的其他一些答案已经解决了如何构建更好的循环,以及如何 add/drop 从列表中复制项目,但没有解决如何在不接触同一项目两次的情况下迭代项目。任何帮助表示赞赏。
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()
尝试将图像循环更改为以下内容
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')
我的任务是将几批货运的质量控制图片移动到特定格式的 ppt 幻灯片中,并且 运行 进入了几个问题。首先,加载的图片与目录和子目录中的图片顺序不同。这很重要,因为它们以正确的顺序保存在文件夹中。这也导致它们在幻灯片中以反坐标填充。我的第二个也是最大的问题是第一张幻灯片有 4 张独特的图片,但之后的每张幻灯片都以与上一张幻灯片中最后一张相同的图片开头,即:
- 幻灯片 1 = img00、img01、img02、img03
- 幻灯片 2 = img03、img04、img05、img06
- 幻灯片 3 = img06、img07、img08、img09
如何在每个循环开始时遍历文件并将它们添加到幻灯片中而不重复?我有一些类似于 if i not in condition 的东西,但这会破坏代码。就目前而言,它可以创建幻灯片并添加图像,但效果不是很好。类似问题的其他一些答案已经解决了如何构建更好的循环,以及如何 add/drop 从列表中复制项目,但没有解决如何在不接触同一项目两次的情况下迭代项目。任何帮助表示赞赏。
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()
尝试将图像循环更改为以下内容
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')