周 航,王鶴螢,龍 波,蘭天寶,王驥驍
(中國核電工程有限公司,北京 100840)
力學分析工作是核電工程中管道布置設計工作的重要環節。目前較為通用的力學管道商業計算軟件為國外引進的PIPESTRESS 軟件,該軟件在核級管道力學計算中已被廣泛采用。但該軟件沒有針對中文報告文檔的生成模塊,目前對PIPESTRESS 計算結果的提取和處理缺乏高效、自動化的方式。在力學分析工作過程中需要產出大量的docx 格式的電子報告文檔。報告文檔通常具有相似的結構,如幾何模型說明,設計條件,計算原則,計算結果等,并且經常包含各種各樣相同的要素信息,如項目名稱,工種名稱等。同事,報告文檔中還涉及大量技術指標的確定和分析,對不同的報告,這些技術指標均需要根據對應的計算結果給出,其中的引用關系及部分指標之間的關聯錯綜復雜,難以保證技術狀態的一致性。分析者需要從PIPESTRESS 的大量計算結果文件中人工查找數據,手動填寫并編制報告。人工查找數據效率較低,錯誤率較高;此外,當計算條件及分析要求發生變化,或模型需要修改及重新計算時,分析者均需要對文檔進行重復編輯及排版,報告中特定項目的統一聲明和規范也需要手動更新,占用了大量的人力和時間資源。
針對此種情況,本文提供了一種可與PIPESTRESS軟件結合應用的管道力學分析報告生成程序,可使用PIPESTRESS 計算結果文件直接生成管道力學分析報告文檔并進行排版,提高管道力學分析的效率及保證成品文件的準確性。該程序使用Python 程序設計語言編寫程序,對PIPESTRESS 結果數據進行提取及分析,將報告所需數據自動添加到word 模板文檔中對應位置并進行排版,生成word 格式的力學報告文件正文部分。利用程序自動化實現了部分力學報告質量保證要求的強制執行,并減輕了管道分析工作人員的工作負擔。實現了對報告的模板化、標準化、規范化管理,建立報告文檔與力學計算結果關鍵指標的關聯,最終有效地規范報告編制流程,縮短編制周期,提高文檔質量,降低編制成本[1]。
本文所述管道力學分析報告高效編制程序的開發基于Python 程序設計語言。Python 語言自從20 世紀90 年代初誕生至今,已經成為最受喜愛的編程語言之一,其主要原因是該語言語法的簡潔性、易讀性以及強大的可擴展性,不僅免費開源,對操作系統要求低,沒有商業許可限制,還有極其強大的第三方庫和龐大穩定的社區,真正做到面向對象,靈活強大??傮w來說,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 標記結合使用,基于模板生成更多文檔。
管道力學分析報告需要給出計算所依據的條件,該管道的幾何特征(管道的溫度,壓力,壁厚,線重;支架及閥門的編號,功能,模型中的節點號,約束方向等),計算所依據的規范,計算結果數據(規范中不同方程下最大應力所在的節點編號,計算應力值,許用應力值,應力計算值與許用值之比等)。因此,一份管道力學分析報告通??梢杂山y一標準化的模板和個性化的數據組成。
同一項目的管道力學分析報告,其大部分內容如報告結構、排版格式通常是相同的,如封面、計算程序及計算標準、符號說明、規范說明、參考文獻等內容通常完全相同。因此,可以將這些內容提前編制好作為報告模板,在此基礎上利用程序提取出個性化的計算結果數據并填充至模板的相應位置,便可實現管道力學分析報告的高效準確編制[2]。
程序對報告的處理過程本質上是將文檔模板化。對文檔進行固定化部分和參數化部分,針對參數化部分的數據進行修改。利用程序將數據和模板兩個原成分以規定的形式“粘合”,生成最終文檔。
從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”提取為函數結果。
模板中需要統一標準化的部分可以根據項目需要預先編制。模板在邏輯上與代碼是分開的,允許對模板不變的部分進行獨立修改而無須修改程序的源代碼。
高效編制管道力學分析報告程序需要用到的核心功能是將程序提取出的數據填充進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]。
管道力學分析工作中的報告編制過程。以及校審環節改正錯誤的重復編制過程大約耗時16h 左右。使用該軟件自動生成報告后,分析者僅需對結果進行核對,降低了由于人為因素造成的報告出錯概率,并將報告編制過程時間大幅縮短,平均一份報告的編制過程可縮短至1~2h。本文所述基于Python 程序設計語言自主研發的管道力學分析報告自動生成程序,需求明確,可直接解決管道力學分析工作編制報告過程中的部分重復性工作,實現業務自動化;使用方便,報告模板可根據不同項目要求進行更新迭代;并具有良好的可擴展性。此外,本文所述技術可以推廣應用于其他領域的文檔動態編制工作中,具有較好的參考意義。