python-pptx - 在嵌套for循环的多个目录中迭代imagis,第n个循环重复前一个循环的最后一项 - Python
问题描述
我的任务是将几批货运的 qc 图片以特定格式移动到 ppt 幻灯片中,并且遇到了几个问题。首先,加载的图片与它们在目录和子目录中的顺序不同。这很重要,因为它们以正确的顺序保存在文件夹中。这也导致它们在幻灯片中以反坐标填充。我的第二个也是最大的问题是第一张幻灯片有 4 个独特的图像,但是之后的每张幻灯片都以与上一张幻灯片上使用的最后一张相同的图像开头,即:
- 幻灯片 1 = img00、img01、img02、img03
- 幻灯片 2 = img03、img04、img05、img06
- 幻灯片 3 = img06、img07、img08、img09
如何在每个循环的乞求时迭代文件并将它们添加到幻灯片而不重复?我有类似于 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()
解决方案
尝试将图像循环更改为以下
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')
推荐阅读
- c# - 将带有令牌身份验证/授权的 ApiController 添加到现有的 ASP.NET MVC 项目
- python - Keras 用于多任务学习神经网络的顺序与功能 API
- tfs - 如何重新排序 TFS 代理的构建队列等待列表?
- python - 使用 Python 3 从 PDF 解析中提取标题和子标题
- algorithm - 泛型三角数列公式
- mysql - 创建命名元组时,如何替换值?
- java - 窗口类型 2002 和 2038 的权限被拒绝
- c# - 比较程序集名称导致不匹配:修订号
- java - 如何检查 java/kotlin 中的性能时间?
- java - 使用调用其他 java 文件的对象创建两个构造函数