【简洁明快】使用python读取数据建立pptx (python-pptx图文调整案例)

使用python自动读取数据建立pptx

  • 前言
  • 如何使用 Python 自动生成 PPTX
    • 第一步:安装所需库
    • 第二步:创建一个新的 PPTX
    • 第三步:添加幻灯片
    • 第四步:添加内容
      • 添加文本
      • 添加图片
      • 第五步:保存 PPTX
  • 图文实操案例(自动读取数据建立python文档)

前言

以下是简洁明快的使用python自动读取数据建立pptx的过程。

如果需要更详细的,可以看一下这个帖子:Python自动化办公:ppt文件操作教程 。这里面有详细的python-pptx的内容讲解,包括怎么插入自选形状,怎么填充等等

若想要快速掌握知识同时应用,下面这些已经足够

如何使用 Python 自动生成 PPTX

当我们在处理批量数据时 ,可以通过Python高效的自动生成PPTX。这里我们将使用python-pptx库来作为讲解。

第一步:安装所需库

首先使用pip来安装 python-pptx 库:

pip install python-pptx

如果数据中涉及到图片数据,还可以安装 Pillow 库:

pip install Pillow

第二步:创建一个新的 PPTX

  1. 通过 Presentation 类来创建一个新的 PPTX 对象(这个对象最终可以保存成一个或多个文件):
from pptx import Presentation# 创建一个新的PPTX对象
prs = Presentation()

第三步:添加幻灯片

PPTX 文件往往由多个幻灯片组成。我们可以使用不同的布局来添加幻灯片:

# 添加一张空白幻灯片
slide_layout = prs.slide_layouts[5]  # 选择一个空白布局
slide = prs.slides.add_slide(slide_layout)

python-pptx中,以下是prs.slide_layouts[0]prs.slide_layouts[8]的布局
在这里插入图片描述

第四步:添加内容

你可以在幻灯片上添加文本框、图片等内容。:

添加文本

添加标题文本框

from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN# 添加标题文本框
title_box = slide.shapes.add_textbox(Inches(0), Inches(0), prs.slide_width, Inches(1))
title_frame = title_box.text_frame
title_frame.text = "这是一个标题"
title_frame.paragraphs[0].font.bold = True
title_frame.paragraphs[0].font.size = Pt(32)
title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER

添加图片

from PIL import Image# 打开图片以获取尺寸
image_path = 'path/to/your/image.jpg'
with Image.open(image_path) as img:width, height = img.sizeaspect_ratio = width / height# 根据宽高比调整图片大小
pic_height = Inches(2)
pic_width = pic_height * aspect_ratio# 添加图片到幻灯片
left = Inches(0.5)
top = Inches(1.5)
slide.shapes.add_picture(image_path, left, top, height=pic_height)

第五步:保存 PPTX

完成所有幻灯片的添加后,我们可以保存 PPTX 文件:

prs.save('your_presentation.pptx')
print("PPTX 文件已保存为 'your_presentation.pptx'")

图文实操案例(自动读取数据建立python文档)

以下是我自动读取scene graph generationVG150groundtruth三元组和predicate三元组文件,并建立pptx的过程代码。

代码写的很清晰,大家看完我下面的流程,基本就对python制作pptx很熟练了。

import json
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from PIL import Image# 定义一个函数来加载JSON文件
def load_results_from_json(file_name):with open(file_name, 'r') as f:data = json.load(f)return data# 加载保存的结果
results_file = 'SGG_Data.json'
results_data = load_results_from_json(results_file)# 创建一个PPT对象
prs = Presentation()# 定义一个函数来添加幻灯片
def add_slide(prs, image_id, gt_triplets, pred_triplets, image_path):slide_layout = prs.slide_layouts[5]  slide = prs.slides.add_slide(slide_layout)# 读取图片大小with Image.open(image_path) as img:width, height = img.sizeaspect_ratio = width / height# 根据图片的宽高比调整图片大小pic_height = Inches(2)  # 你可以根据需要调整这个值pic_width = pic_height * aspect_ratio# 添加图片left = Inches(0.5)top = Inches(1)pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)# 添加标题title_box = slide.shapes.add_textbox(Inches(0), Inches(0), prs.slide_width, Inches(1))title_frame = title_box.text_frametitle_frame.text = f"Image ID: {image_id}"title_frame.paragraphs[0].font.bold = Truetitle_frame.paragraphs[0].font.size = Pt(32)  # 调整字体大小title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER# 添加 Groundtruth Tripletsleft = Inches(0.5)top = Inches(3.5)width = Inches(4.5)height = Inches(4.5)textbox = slide.shapes.add_textbox(left, top, width, height)text_frame = textbox.text_frametext_frame.text = "Groundtruth data:"for triplet in gt_triplets:p = text_frame.add_paragraph()p.text = f"{triplet[0]} - {triplet[1]} - {triplet[2]}"p.font.size = Pt(12)  # 调整字体大小# 添加 Predicted Tripletsleft = Inches(5.5)top = Inches(3.5)width = Inches(4.5)height = Inches(4.5)textbox = slide.shapes.add_textbox(left, top, width, height)text_frame = textbox.text_frametext_frame.text = "Predicted data:"for triplet in pred_triplets:p = text_frame.add_paragraph()p.text = f"{triplet['triplets'][0]} - {triplet['triplets'][1]} - {triplet['triplets'][2]} "p.font.size = Pt(12)  # 调整字体大小# 设置生成幻灯片的最大数量
max_slides = 10# 遍历数据并添加幻灯片
for i, res in enumerate(results_data):if i >= max_slides:breakimage_id = res['Image ID']gt_triplets = res['Groundtruth data']pred_triplets = res['Predicted data']image_path = f"C:/我的文件/数据集/VG_100K/{image_id}"  # 假设图片存储在images目录下add_slide(prs, image_id, gt_triplets, pred_triplets, image_path)# 保存PPT文件
prs.save('test_demo.pptx')
print("PPT file has been saved as 'test_demo.pptx'")

生成结果:
在这里插入图片描述

  1. 根据上面我提供的知识。我现在希望每页空白页面上,没有【单击此处添加标题】框。
    所以我把代码中的slide_layout = prs.slide_layouts[5] 改成slide_layout = prs.slide_layouts[6]
    在这里插入图片描述
    得到下面结果
    在这里插入图片描述
  2. 根据上面的知识,现在我希望pptx中的图片放大一点,所以我把下述代码进行如下修改:
    # 读取图片大小with Image.open(image_path) as img:width, height = img.sizeaspect_ratio = width / height# 根据图片的宽高比调整图片大小pic_height = Inches(2)  # 你可以根据需要调整这个值pic_width = pic_height * aspect_ratio# 添加图片left = Inches(0.5)top = Inches(1)pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)

首先修改图片的大小,原来是高度为2Inch,现在修改为3Inch,然后通过ratio比例, 图片自动会放大。

    # 根据图片的宽高比调整图片大小pic_height = Inches(3)  # 你可以根据需要调整这个值pic_width = pic_height * aspect_ratio

在这里插入图片描述
之后我觉得图片大了,把图片往左边和上边挪一挪,所以对下述代码:

    # 添加图片left = Inches(0.5)top = Inches(1)pic = slide.shapes.add_picture(image_path, left, top, height=pic_height)

做如下修改:
left就是图片的左边距,我改成0.2Inch,往左边挪挪,top是上边距,我改成0.6Inch,往上边挪挪。)
在这里插入图片描述
之后我觉得字体小了,我把字体试着调大,那就需要调节下述代码:

    # 添加 Groundtruth Tripletsleft = Inches(0.5)top = Inches(3.5)width = Inches(4.5)height = Inches(4.5)textbox = slide.shapes.add_textbox(left, top, width, height)text_frame = textbox.text_frametext_frame.text = "Groundtruth data:"for triplet in gt_triplets:p = text_frame.add_paragraph()p.text = f"{triplet[0]} - {triplet[1]} - {triplet[2]}"p.font.size = Pt(12)  # 调整字体大小

下面这部分是Groundtruth data文本的左边距上边距,还有文本的。我们暂时不用调节(我把上边距往下调了一点点)

    left = Inches(0.5)top = Inches(3.8)width = Inches(4.5)height = Inches(4.5)

我们只需要调节字体即可(我将字体从12调节到14):

p.font.size = Pt(14)  # 调整字体大小

得到如下PPT
在这里插入图片描述
字体也调节成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35391.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机

【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机 dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆),可以在浏览器和node.js、d…

Vue智慧商城项目

创建项目 vue组件库 — vant-ui(常用于移动端) Vant 2 - 轻量、可靠的移动端组件库 安装vant npm i vantlatest-v2 -S 引入组件 按需导入和全部导入 全部导入 整个组件库的所有组件都导进来,缺点是增加了代码包体积 main.js import…

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代,提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步,为搜索引擎优化(SEO)提供了强有力的支持,尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁,其…

以MP6924A为核心的LLC拓扑学习【一】

PFCLLC: 在PFC(功率因数校正)和LLC(谐振变换器)组成的电源系统中,各个电路有特定的作用,它们协同工作以实现高效率和高功率因数的电能转换。 1. PFC(功率因数校正)电路的作用 PFC电…

实践教程|Transformer Decoder-Only 模型批量生成 Trick

导读 本文给出了一个用单Transformer decoder( GPT)模型进行批量生成时的解决方法。 发现用单 Transformer decoder (Aka GPT)模型进行生成时,因为位置对齐等问题,进行批量生成时十分麻烦。 训练时&#…

DevExpress WPF v24.2新功能预览 - 键盘导航和屏幕阅读器功能增强

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象,显示这个相机的视锥。 想要在场景里面显示相机的视锥,需要创建两个相机。 举个例子,场景中有个相机A,想要显示相机A的视锥,那么需要一个相机B,把B放在A的后面,两个…

财务规划的变革:如何推动数据科学的转型和分析

在快速发展的金融世界中,财务专业人士越来越需要超越传统预算方式的数据分析方法,将现代化的预算技术、工具和方法引入到我们的企业发展过程中,并在企业内部发挥更具战略性的作用。数据科学、财务预测和预算分析是企业财务领域成功所必需的核…

PyTorch环境迁移指南

在进行深度学习研究和开发时,我们经常需要在不同计算机之间迁移PyTorch环境。无论是更换新设备还是在多台机器间协同工作,都需要确保环境配置的一致性。本文将详细介绍PyTorch环境迁移的完整流程和注意事项。 环境迁移看似简单,实则暗藏玄机。直接复制文件可能会遇到系统差异带…

深信服ATRUST与锐捷交换机端口链路聚合的配置

深信服ATRUST业务口原来只配置使用一个电口,近期出现流量达到800-900M接近端口的极限带宽。由于设备没有万光口,于是只好用2个光口来配置链接聚合。 下需附上深信服ATRST端口配置的截图,由于深信服ATRUST与锐捷交换机端口只共同支持源mac目的…

WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。

新建EXCLE文件 另存为xlsm格式的文件 先打开WPS的开发工具中的宏编辑器 宏编辑器编译环境 在工作区添加函数并编译,如果有错误会有弹窗提示,如果没有错误则不会弹 函数名字 ”HEXTOFLOAT“ 可以自己修改。 function HEXTOFLOAT(hex) { // 将十六…

亚马逊云服务器Amazon EC2

一、什么是Amazon EC2? Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services (AWS) 云中提供按需、可扩展的计算容量。使用 Amazon EC2 可降低硬件成本,让您能够更快地开发和部署应用程序。您可以使用 Amazon EC2 启动任意数量的虚拟服务…

1688:开启跨境电商新篇章

引言 在全球化贸易不断深化的今天,跨境电商已成为中小企业拓展国际市场的重要渠道。1688,作为阿里巴巴集团旗下领先的内贸平台,近年来也逐渐发力跨境电商领域,为全球买家提供了一个直通中国工厂的贸易平台。本文将带您深入了解16…

ES使用script进行复杂排序

es数据字段,关注_source内容,为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…

Leecode刷题C语言之可以被进一步捕获的棋子数

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int numRookCaptures(char** board, int boardSize, int* boardColSize) {int cnt 0, st 0, ed 0;int dx[4] {0, 1, 0, -1};int dy[4] {1, 0, -1, 0};for (int i 0; i < 8; i) {for (int j…

攻防世界杂项刷题笔记(引导模式)13-23

引言&#xff1a;14包括提取文件和流量分析&#xff0c;22很新颖&#xff01;&#xff01;其他的都是常规隐写 13.base64stego 经过上一次如来十三掌的磨练&#xff0c;这题在看到题干“十三掌”的时候我是丝毫不慌张的。附件给了压缩包&#xff0c;考虑是不是伪加密&#xf…

Linux-PWM应用编程

本章我们将学习如何对开发板上的 PWM 设备进行应用编程。 本章将会讨论如下主题内容。 ⚫ 应用层 PWM 编程介绍&#xff1b; ⚫ PWM 测试。 应用层如何操控 PWM 与 LED 设备一样&#xff0c;PWM 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/pwm 目录下&…

Seaborn | 绘制数据分布的两个函数distplot和countplot

distplot 和 countplot 是 seaborn&#xff08;Seaborn&#xff09;库中用于绘制数据分布的两个函数&#xff0c;它们各自有不同的用途和特点&#xff1a; 1. distplot&#xff08;分布图&#xff09; distplot 函数用于绘制单变量的分布图。它可以显示数据的直方图&#xff…

网络原理 网络协议栈

POSIX API与网络协议栈 unix有不同的衍生版本&#xff0c;针对不同的版本&#xff0c;通过Posix定义了一套标准的操作系统接口API&#xff0c;使得不同的开发版本可以使用相同的API调用&#xff0c;具有可移植性。 网络连接相关API&#xff1a; 客户端 socket() bind() con…

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析&#xff1f; 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类&#xff0c;使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…