APP下载

基于Python 的管道力学分析报告生成程序实现

2024-05-28王鹤萤兰天宝王骥骁

大科技 2024年21期
关键词:字典力学文档

周 航,王鹤萤,龙 波,兰天宝,王骥骁

(中国核电工程有限公司,北京 100840)

0 引言

力学分析工作是核电工程中管道布置设计工作的重要环节。目前较为通用的力学管道商业计算软件为国外引进的PIPESTRESS 软件,该软件在核级管道力学计算中已被广泛采用。但该软件没有针对中文报告文档的生成模块,目前对PIPESTRESS 计算结果的提取和处理缺乏高效、自动化的方式。在力学分析工作过程中需要产出大量的docx 格式的电子报告文档。报告文档通常具有相似的结构,如几何模型说明,设计条件,计算原则,计算结果等,并且经常包含各种各样相同的要素信息,如项目名称,工种名称等。同事,报告文档中还涉及大量技术指标的确定和分析,对不同的报告,这些技术指标均需要根据对应的计算结果给出,其中的引用关系及部分指标之间的关联错综复杂,难以保证技术状态的一致性。分析者需要从PIPESTRESS 的大量计算结果文件中人工查找数据,手动填写并编制报告。人工查找数据效率较低,错误率较高;此外,当计算条件及分析要求发生变化,或模型需要修改及重新计算时,分析者均需要对文档进行重复编辑及排版,报告中特定项目的统一声明和规范也需要手动更新,占用了大量的人力和时间资源。

针对此种情况,本文提供了一种可与PIPESTRESS软件结合应用的管道力学分析报告生成程序,可使用PIPESTRESS 计算结果文件直接生成管道力学分析报告文档并进行排版,提高管道力学分析的效率及保证成品文件的准确性。该程序使用Python 程序设计语言编写程序,对PIPESTRESS 结果数据进行提取及分析,将报告所需数据自动添加到word 模板文档中对应位置并进行排版,生成word 格式的力学报告文件正文部分。利用程序自动化实现了部分力学报告质量保证要求的强制执行,并减轻了管道分析工作人员的工作负担。实现了对报告的模板化、标准化、规范化管理,建立报告文档与力学计算结果关键指标的关联,最终有效地规范报告编制流程,缩短编制周期,提高文档质量,降低编制成本[1]。

1 Python 技术概述

本文所述管道力学分析报告高效编制程序的开发基于Python 程序设计语言。Python 语言自从20 世纪90 年代初诞生至今,已经成为最受喜爱的编程语言之一,其主要原因是该语言语法的简洁性、易读性以及强大的可扩展性,不仅免费开源,对操作系统要求低,没有商业许可限制,还有极其强大的第三方库和庞大稳定的社区,真正做到面向对象,灵活强大。总体来说,Python 语言是可以快速工作并且集成系统更高效的编程语言,可以满足工作流程自动化需求。

Python 语言对Word 文档的操作有两大类方法:①通过Word 官方提供的COM 接口来实现。②通过直接读写Word 文档来实现。前者利用Word 程序提供的接口功能。后者通过第三方库基于对Word 文档的存储格式的解析,提供对文档的操作。本文采用第三方库的方法对文档进行底层操作。

Python-docx 作为Python 的一种第三方库,可用于创建及修改微软Office 办公程序中的Word 文档内容及格式,提供完善的Word 程序操作。Jinja2 基于是Python 生态系统的模板语言。模板语言允许创建基于文本的文档,文档中的部分内容可以动态生成。生成的文件可以是HTML、JSON、XML 或任何使用纯文本作为编码的文件。Python-docx-tpl 是结合Python-docx 和Jinja2 的Python 第三方库,用于将Word 模板文件和Jinja 标记结合使用,基于模板生成更多文档。

2 管道力学分析报告的编制

管道力学分析报告需要给出计算所依据的条件,该管道的几何特征(管道的温度,压力,壁厚,线重;支架及阀门的编号,功能,模型中的节点号,约束方向等),计算所依据的规范,计算结果数据(规范中不同方程下最大应力所在的节点编号,计算应力值,许用应力值,应力计算值与许用值之比等)。因此,一份管道力学分析报告通常可以由统一标准化的模板和个性化的数据组成。

同一项目的管道力学分析报告,其大部分内容如报告结构、排版格式通常是相同的,如封面、计算程序及计算标准、符号说明、规范说明、参考文献等内容通常完全相同。因此,可以将这些内容提前编制好作为报告模板,在此基础上利用程序提取出个性化的计算结果数据并填充至模板的相应位置,便可实现管道力学分析报告的高效准确编制[2]。

3 管道力学计算报告生成程序

程序对报告的处理过程本质上是将文档模板化。对文档进行固定化部分和参数化部分,针对参数化部分的数据进行修改。利用程序将数据和模板两个原成分以规定的形式“粘合”,生成最终文档。

3.1 数据提取

从PIPESTRESS 程序中提取所需数据,可以利用Python 中的正则表达式(re Regular Expression)模块。该模块具有强大的文本解析、复杂字符串分析和信息提取功能。利用re.sub(pattern,repl,string)指令获取结果文件中的特定参数。并通过查找关键字筛选,将数据属性及相关联的数据值作为字典的键值对进行储存。字典是Python 对象中的一种数据类型,通过键值对来存储对象。每个项目之间的次序是任意的,只是创建一种键-值对的映射关系。字典作为一种可变容器模型,是表示无顺序集合的一个非常灵活的工具。在力学报告中,每个节点在各个工况下都具有很多属性参数,可以将属性的名称作为字典的键,将属性的值作为字典的值。例如,将“管道编号”“管道外径”“管道壁厚”作为字典的键,对应地将“001”“33.4”“2.77”作为字典的值。用字典对象调用相关的管道信息时,数据存储量小,存储结构简洁明了[3]。

利用re 模块定义查找模型集中质量的函数,并从结果文件中获取集中质量的语句示例如下。

示例中定义的find_MA 函数可将结果文件中形如“MA=1.580”中的集中质量参数“1.58”提取为函数结果。

3.2 报告生成的实现

模板中需要统一标准化的部分可以根据项目需要预先编制。模板在逻辑上与代码是分开的,允许对模板不变的部分进行独立修改而无须修改程序的源代码。

高效编制管道力学分析报告程序需要用到的核心功能是将程序提取出的数据填充进Word 模板文档中,为其指定位置并编辑格式[4]。

调用Python-docx-tpl 库并指定文档模板文件为reporter.docx 的语句如下。

3.2.1 文本生成

以计算结论为例,力学分析报告要求以文本形式给出管道的最大应力比值和所在的节点号。

首先将程序中提取出的最大应力比值及其节点号储存于字符串变量maxstressnode 与maxstressratio 中。

在模板文件reporter.docx 中相应位置插入含有占位符的语句描述,案例如下。

计算表明所有节点的应力比都低于节点{{maxnode}},此点的最大应力比值为{{maxratio}}。

占位符名称以模板语言的格式书写在双大括号内。以下列语句在程序中给出变量和占位符间的对应关系,从而使变量填充至模板文档的正确位置。

渲染文档的语句为:tpl.render(context)

渲染后,在文档中便可得到用结果文件中对应数据填充语句如下。

计算表明所有节点的应力比都低于节点786,此点的最大应力比值为0.964。

3.2.2 表格生成

进一步地,以应力清单为例,力学分析报告要求以表格形式给出管道的应力评定结果。

首先将程序中提取出的数据整理成适合填充至Word 文档表格中的数据结构,其语句如下。

例中变量maxstress 为使用程序预先提取出的管线最大应力计算结果,数据结构形式为字典,字典的键为管道的各种属性名称,字典的值为这些属性的具体数值。变量head 为表格表头。上述语句将表头与数据赋值给列表maxtables。

下列语句可以选择出需要填充至模板文档的内容。

语句中maxtables 为需要填充至模板文件中的数据。tbl,contents 为模板文件中占位符的名称。在模板文件reporter.docx 中相应位置插入含有占位符的表格,占位符名称tbl_contents、col 与前文中整理出的数据结构相对应,含占位符的表格模板示例如表1 所示。

表1 含占位符的表格模板示例

渲染文档,填充内容并将其另存为output 文件夹下名为LXSJ.docx 文档的语句如下。

渲染后,文件LXSJ.docx 中便可得到用特定数据填充的表格。程序生成的管道应力评定结果表格示例如表2 所示。

表2 程序生成的管道应力评定结果表格示例

其他几何特征,计算结果数据等可以用同样的方法在模板中定义位置,提取数据,并填充结果。最后新生成的文件LXSJ.docx 即为本题目的管道力学分析报告正文部分,计算者仅需补充报告附录,对计算说明、修改说明进行叙述,并对报告进行核对。至此,用户利用该程序高效、准确地从PIPESTRESS 结果文件中提取出管道应力分析报告所需的数据,并在项目模板的基础上自动生成了不同管道的应力分析报告[5]。

4 结语

管道力学分析工作中的报告编制过程。以及校审环节改正错误的重复编制过程大约耗时16h 左右。使用该软件自动生成报告后,分析者仅需对结果进行核对,降低了由于人为因素造成的报告出错概率,并将报告编制过程时间大幅缩短,平均一份报告的编制过程可缩短至1~2h。本文所述基于Python 程序设计语言自主研发的管道力学分析报告自动生成程序,需求明确,可直接解决管道力学分析工作编制报告过程中的部分重复性工作,实现业务自动化;使用方便,报告模板可根据不同项目要求进行更新迭代;并具有良好的可扩展性。此外,本文所述技术可以推广应用于其他领域的文档动态编制工作中,具有较好的参考意义。

猜你喜欢

字典力学文档
开心字典
开心字典
力学
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
弟子规·余力学文(十)
弟子规·余力学文(四)
基于RI码计算的Word复制文档鉴别
我是小字典
正版字典