fluent脚本技巧,python正则表达式常用用法

采用上下文的方式,来匹配替换jou脚本中特定的字符串,相比去思考能够匹配目标字符串的复杂正则表达要方便一些,这里要用到一个分组操作:

比如这里要将下面这个jou的倒数第三行中的krige_3换成krige_4,5…20

/file/set-tui-version "19.2"
(cx-gui-do cx-activate-item "MenuBar*ReadSubMenu*Case & Data...")
(cx-gui-do cx-set-file-dialog-entries "Select File" '( "C:/Users/DELL/jupyter_script/gan_foil_opt/fan_wing_opt/case_data/krige_3/case.cas") "Case Files (*.cas*)")
(cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Solution|Run Calculation"))
(cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Solution|Run Calculation"))
(cx-gui-do cx-activate-item "NavigationPane*List_Tree1")
(cx-gui-do cx-set-list-tree-selections "NavigationPane*List_Tree1" (list "Solution|Run Calculation"))
(cx-gui-do cx-set-toggle-button2 "Run Calculation*Table1*CheckButton17(Solution Steering)" #t)
(cx-gui-do cx-activate-item "Run Calculation*Table1*CheckButton17(Solution Steering)")
(cx-gui-do cx-set-integer-entry "Run Calculation*Table1*IntegerEntry10(Number of Iterations)" 1000)
(cx-gui-do cx-activate-item "Run Calculation*Table1*IntegerEntry10(Number of Iterations)")
(cx-gui-do cx-activate-item "Run Calculation*Table1*PushButton22(Calculate)")
(cx-gui-do cx-activate-item "Question*Cancel")
(cx-gui-do cx-activate-item "Question*OK")
(cx-gui-do cx-activate-item "Information*OK")
(cx-gui-do cx-activate-item "MenuBar*WriteSubMenu*Case & Data...")
(cx-gui-do cx-set-file-dialog-entries "Select File" '( "C:/Users/DELL/jupyter_script/gan_foil_opt/fan_wing_opt/case_data/krige_3/case.cas") "Case/Data Files (*.cas* *.dat* )")
(cx-gui-do cx-activate-item "Question*OK")
/exit y

可以通过前后文case_data/和case.cas来匹配字符串krige_3,并将前文、后文和目标字符串分别分组,再对分组重新调用来改变该位置处的字符串。

下面是建krige模型的时候用的一段脚本,其作用是在krige_1-krige_20文件夹里分别运行cal_acc.jou脚本。

import re
m = re.compile('(case_data/)(.+)(/case.cas)')

for i in range(20):
    with open('./case_data/cal_acc.jou', 'r+') as f:
        x = f.readlines()
        x[-3] = m.sub('{}{}{}'.format(match.group(1), 'krige_{}'.format(i+1), match.group(3)), x[-3])
    with open('./case_data/cal_acc.jou', 'w') as f:
        f.writelines(x)
    os.system('"fluent地址\\fluent.exe" 3d -hidden -t16 -i jou地址/cal_acc.jou')

如果不用分组操作,也可以达到类似目的,比如用:

for i in range(20):
	m = re.compile('krige_(\d+)')
	m.sub('krige_{}'.format(i+1), x[-3])

这样也可以起到相同的效果,但在一些复杂的语句里,有时候思考相应匹配的正则表达式要花掉很多时间。

目前我个人觉得,仅在fluent脚本的自动化方面,采用上下文分组匹配的方法更加实用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值