用 Python 的 Template 类生成文件报告

Python自动化测试框架【生成测试报告】 py的意思是,./testcase路径下文件名称格式为test_#导入test_login的包,执行测试用例时需使用。#打开百度,搜索“163网易邮箱”,登录。#导入HTMLTestRunner的包。#定义要执行的测试用例的路径和名称格式。为任意匹配,路径下有多少的test_.py格式的文件,就依次执行几个。#定义测试报告的名称和存储位置。#定义要执行的测试用例的路径。 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料、代码以及群交流解答点击即可加入


介绍

很多时候,我发现自己需要进行生成报告、输出文件或字符串的任务。它们或多或少都会遵循某种模式,通常这些模式是如此相似,以至于我们希望拥有一个可以重用并直接输入数据的模板。幸运的是,Python提供了一个可以帮助我们的类:string.Template。

在本文中,您将学习如何利用此类根据当前使用的数据生成输出文件,以及如何以相同的方式操作字符串。因此,本文不仅使用您在日常工作中可能遇到的示例,还为您提供了许多您可能知道的实际工具,并且该工具将此类用于生成报告文件。下面让我们开始吧!

注意:本文基于Python 3.9.0(CPython)。您可以在GitHub(https://github.com/DahlitzFlorian/generate-file-reports-using-pythons-template-class)上找到整篇文章中使用的代码示例。

在看一个示例之前,让我们花一些时间来看看使用string.Template相对于其他解决方案的优势。
1、无需其他依赖项,开箱即用,因此不需要使用pip install命令安装。
2、它是轻量级的,当然诸如Jinja2和Mako之类的模板引擎已被广泛使用。但是,在本文介绍的方案中,这些功能是过分地夸大了。
3、关注点分离:可以使用模板文件将其移动到外部位置,而不是直接在代码中嵌入字符串操作和报告生成。如果您要更改报告的结构或设计,则可以交换模板文件,而无需更改代码。

由于这些优点,一些知名的第三方库和工具正在使用它。Wily是一个例子,在2018年底,Wily的发明者和维护者Anthony Shaw希望支持HTML作为wily生成的报告的输出格式。

示例:生成最佳图书的报告

在讨论了使用Python的内置string.Template类背后的动机之后,我们将看一下第一个实际示例。想象一下,您正在一家公司工作,该公司发布有关过去一年出版的最佳书籍的年度报告。2020年是特殊的一年,因为除了您的年度报告之外,您还会发布有史以来最好的书籍清单。

在这一点上,我们不在乎数据来自何处或哪些书籍是该列表的一部分。为了简单起见,我们假设有一个名为data.json的JSON文件,其中包含作者姓名和书名的映射,如下所示。

{
    "Dale Carnegie": "How To Win Friends And Influence People",
    "Daniel Kahneman": "Thinking, Fast and Slow",
    "Leo Tolstoy": "Anna Karenina",
    "William Shakespeare": "Hamlet",
    "Franz Kafka": "The Trial"
}

您现在的任务是以一种可以与他人共享的方式(例如, 大型杂志、公司或博主)。该公司认为使用HTML格式的简单表格就足够了。现在的问题是:如何生成此HTML表格?

当然,您可以手动执行此操作,也可以为每本书创建占位符。但是后面如果能拥有更通用的版本是非常可取的,因为可以扩展列表内容或更改结构设计。

现在我们可以利用Python的string.Template类!我们首先创建实际的模板,如下所示。在这里,我们将文件称为template.html。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Great Books of All Time</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <h1>Great Books of All Time</h1>
        <table class="table">
            <thead>
                <tr>
                    <th scope="col">#</th>
                    <th scope="col">Author</th>
                    <th scope="col">Book Title</th>
                </tr>
            </thead>
            <tbody>
                ${elements}
            </tbody>
        </table>
    </div>
</body>
</html>

该文件本身非常初级。我们使用引导程序进行样式设置,并创建了最终表的基本结构。表头已包含在内,但数据仍然丢失。请注意,在tbody元素中,使用了一个占位符$ {elements}来标记我们稍后将注入书籍列表的位置。

我们把所有都已设置为实现生成所需输出的Python脚本!因此,我们在当前工作目录中创建一个名为report.py的新Python文件。首先,我们导入所需的两个内置模块,并从JSON文件加载数据。

# report.py
import json
import string

with open("data.json") as f:
    data = json.loads(f.read())

现在,data变量是一个字典,其中包含作者的名称(键)和书名(值)作为键值对。接下来,我们生成HTML表,将其放入模板中(还记得占位符吗?)。因此,我们初始化一个空字符串,向其添加新的表行,如下所示。

content = ""
for i, (author, title) in enumerate(data.items()):
    content += "<tr>"
    content += f"<td>{i + 1}</td>"
    content += f"<td>{author}</td>"
    content += f"<td>{title}</td>"
    content += "</tr>"

该代码段显示了我们遍历数据字典中的所有项目,并将书名以及作者的名字放在相应的HTML标签中。我们创建了最终的HTML表。在下一步中,我们需要加载之前创建的模板文件:

with open("template.html") as t:
    template = string.Template(t.read())

注意,string.Template接受一个字符串,而不是一个文件路径。因此,您还可以提供在程序中先前创建的字符串,而无需将其保存到文件中。就我们而言,我们提供了template.html文件的内容。

最后,我们使用模板的replace()方法将占位符元素替换为存储在变量内容中的字符串。该方法返回一个字符串,我们将其存储在变量final_output中。最后但并非最不重要的一点是,我们创建了一个名为report.html的新文件,并将最终输出写入该文件。

final_output = template.substitute(elements=content)
with open("report.html", "w") as output:
    output.write(final_output)

现在已经生成了第一个文件报告!如果在浏览器中打开report.html文件,则可以看到结果。

safe_substitution()方法

现在,您已经构建了第一个string.Template用例,在结束本文之前,我想与您分享一个常见情况及其解决方案:安全替换。它是什么?

让我们举个例子:您有一个字符串,您想在其中输入一个人的名字和姓氏。您可以按照以下步骤进行操作:

# safe_substitution.py
import string

template_string = "Your name is ${firstname} ${lastname}"
t = string.Template(template_string)
result = t.substitute(firstname="Florian", lastname="Dahlitz")
print(result)

但是,如果您错过传递一个或另一个的值会怎样?它引发一个KeyError。为避免这种情况,我们可以利用safe_substitution()方法。在这种情况下,safe意味着Python在任何情况下都尝试返回有效字符串。因此,如果找不到任何值,则不会替换占位符。

让我们按以下方式调整代码:

# safe_substitution.py
import string

template_string = "Your name is ${firstname} ${lastname}"
t = string.Template(template_string)
result = t.safe_substitute(firstname="Florian")
print(result)  # Your name is Florian ${lastname}

在某些情况下,这可能是一个更优雅的解决方案,甚至是必须的行为。但是这可能在其他地方引起意外的副作用。

本文概要

在阅读本文时,您不仅学习了Python字符串的基本知识。Template类以及使用它的原因,而且还实现了第一个文件报告脚本!此外,您已经了解了safe_substitution()方法以及在哪种情况下使用它可能会有所帮助。

使用Python生成源文件的两种方法 利用Python的字符串处理模块,开发人员可以编写脚本用来生成那些格式相同的C、C++、JAVA源程序、头文件和测试文件,从而避免大量的重复工作。本文概述两种利用Python string类生成java源代码的方法。 阅读详情

相关推荐

使用Python的Template类生成文件报告

你可以根据具体需求,设计更加复杂的报告模板,并在模板中使用更多的占位符来生成不同类型的报告。在Python中,我们经常需要生成各种形式的文件报告,如文本报告、HTML报告等。这些报告通常包含一些固定格式的内容,但其中的某些部分需要根据不同的数据动态生成。运行上述代码后,将生成一个名为"report.txt"的文件,其中包含了根据销售数据生成的报告内容。报告的标题是"销售报告",内容部分则根据销售数据动态生成。最后,我们将生成的报告写入名为"report.txt"的文件中。然后,我们通过调用模板对象的。

NoerrorCode的博客 248

idea创建vue模板文件

1、步骤如下图: 下图中模板内容如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>#[[$Title$]]#</title> </head> <body> #[[$END$]]# </body...

小志的博客 7419

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 261

python中template的用法,python中template函数

关于flash的制作透明gif的一个小技巧 或者说是一个需要注意的地方 1.导出影片|gif,得到的肯定是不透明的.2.想要透明背景,必须通过发布.3.flash中想要发布gif动画的话,不能有文字, ...替换的内容是通过字典对调用的,所以下面(lang='Python',howmany=3)出现的顺序可以不用严格的和模板中的一样。Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用。当然在使用substitute()的时候,对应的关键字和值都要给出,不然会报错。

chatgpt002的博客 1625

嵌入式存储实战:FAL+SFUD+flashDB三件套在STM32上的完整移植指南(附避坑技巧)

本文提供了一套在STM32上完整移植FAL、SFUD与flashDB嵌入式存储框架的实战指南。详细解析了从SPI驱动配置、SFUD设备识别、FAL抽象层分区到flashDB键值数据库初始化的全流程,并分享了关键的避坑技巧与性能优化建议,帮助开发者构建稳定可靠的嵌入式存储系统。

rnn9storyteller的博客 1017

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析

在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。

weixin_43199439的博客 3328

Python中Template使用

Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用。可以用于自动生成测试用例。 1 2 3 4 fromstringimportTemplate s=Template("there are ${howmany} ${lang} Quotation symbols") prin...

BearStarX的博客 1万+

116、影像质量主观评价方法论:标准场景与专家判读

本文探讨了影像质量主观评价的方法论,强调标准场景构建和专家判读体系的重要性。作者基于15年行业经验指出,仅靠客观指标无法保证观感质量,提出四类标准场景(灰阶、肤色、纹理、动态)的构建原则和四种专家判读维度(通透性、干净度、自然感、流程化)。文章揭示了主观评价中的常见误区,包括光源单一性、个人判读偏差、显示设备影响等,并建议建立多专家交叉验证机制和主观评价数据库。最后强调主观评价是可标准化的专业技术,需要将人眼感知转化为可追溯的技术参数。

sundong_81的博客 39

pycharm 中创建python file 的templates

解决问题;每次创建.py文件都要重复性输入: #!/usr/bin/env python3 # -*- coding: utf-8 -*- 等内容。而且自己创建的文件没有很好的描述,文件信息等。为了规范自己的代码,创建模板,提高重用性。 设置方法:Settings-->Editor-->Code Style-->File and Code Templates-->python script

RonnyJiang的博客 6044

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

QCC304x系列开发教程(基础篇)之2.1-QCC3040之开发环境搭建

一、安装MDE 1.解压qualcomm_mde.win.2.4_installer_2.4.1.4压缩包,安装MDE_WIN_2.4.1.4_x64.exe,路径自定义 点击NEXT, 安装完成后,点击Finish. 完成安装后,桌面生成快捷方式

心跳包的博客 6079

python之Template的使用

Template 字符串模板,用于替换字符串中的变量。 模板字符串支持基于$的替换,并遵循以下规则: $$:被替换为$ $变量:标识符仅限以下划线或者字符开头的字母数字字符串(包括下划线),字符后的第一个非标识符字符终止此占位符规 ${变量}:等同于$变量,当有效标识符位于占位符之后但是不属于占位符是,必须用此种方式,比如${age}age 此类的方法: substitute(mapping={}, /, **kwds):执行模板替换并返回一个新字符串。映射是任何类似于字典的对象,其键与模板中的占位符

weixin_45552310的博客 9928

315、弱电基础知识介绍

常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。

qq_43416206的博客 1366

python template修改文件

python相关学习资料:https://edu.51cto.com/video/4102.htmlhttps://edu.51cto.com/video/3832.htmlhttps://edu.51cto.com/video/1158.htmlPython模板修改文件:代码示例与旅行图 Python是一种广泛使用...

weixin_30978959的博客 197

华为OD新系统机试真题 - 准备生日礼物(Py/Java/C/C++/Js/Go)

华为OD机试新系统真题 4.8【准备生日礼物】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【准备生日礼物】

qq_45776114的博客 1483

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python文档自动化终极指南:用python-docx-template快速生成专业Word文档

在当今数字化办公环境中,Word文档自动化已成为提升工作效率的关键技术。如果你正在寻找一种简单、高效的方式来批量生成专业Word文档,那么python-docx-template正是你需要的解决方案!🚀 ## 什么是python-docx-template? python-docx-template是一个基于Jinja2模板引擎的Python库,专门用于将.docx文件转换为动态模板。它结合

gitblog_00800的博客 1084

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python 生成html表的报告,python 生成HTmL报告页面

计划做一个html页面py3.4 代码:# -*- coding=utf-8 -*-#import time,osclass Template_mixin(object):"""html报告"""HTML_TMPL = r"""自动化测试报告自动化测试报告测试结果 : %(value)sbody { font-family: Microsoft YaHei,Tahoma,arial,helv...

weixin_28732953的博客 401

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

解放Word生产力:python-docx-template让你的文档生成飞起来

python-docx-template是一个强大的Python库,它允许你将Word文档(.docx)作为Jinja2模板使用,轻松实现文档的自动化生成。无论是批量生成报告、合同、简历还是其他重复性文档,python-docx-template都能帮你节省大量时间和精力,让文档处理变得高效而简单。 ## 什么是python-docx-template? python-docx-templat

gitblog_00043的博客 681

Python自动化Word文档生成:python-docx-template完全指南

python-docx-template是一个强大的Python库,它将Microsoft Word文档(.docx格式)作为Jinja2模板进行处理。该库结合了python-docx和Jinja2两个库的优势,让用户能够轻松创建和修改复杂的Word文档。 ## 快速开始 ### 安装方法 ```bash pip install python-docx-template ``` ### 基础

gitblog_00526的博客 1115

如何用python-docx-template轻松生成动态Word文档:小白也能上手的完整指南

你是否曾为批量生成合同、报告或个性化邀请函而烦恼?**python-docx-template** 是一款强大的 Python 库,它允许你将 Word 文档(.docx)作为 Jinja2 模板使用,轻松实现动态内容替换,让文档生成效率提升10倍!无论是新手还是有经验的开发者,都能快速掌握这个实用工具。 ## ???? 什么是 python-docx-template? **python-doc...

gitblog_00174的博客 1351

python 生成HTmL报告页面

计划做一个html页面 py3.4 代码: # -*- coding=utf-8 -*- # import time,os class Template_mixin(object): """html报告""" HTML_TMPL = r""" <!DOCTYPE html> <html l...

weixin_30254435的博客 5728
上一篇: Python批量下载无版权图片
下一篇: 【Mark一下】46个常用 Pandas 方法速查表
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值