You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python提取模拟日志中指定变量的初始残差值并存入数组?

提取模拟日志中初始残差值的Python实现

问题描述

我有一份如下所示的模拟日志:

Time = 1

smoothSolver:  Solving for Ux, Initial residual = 1, Final residual = 0.0289664, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 1, Final residual = 0.028966, No Iterations 2
smoothSolver:  Solving for Uz, Initial residual = 1, Final residual = 0.0842607, No Iterations 1
GAMG:  Solving for p, Initial residual = 1, Final residual = 0.0471791, No Iterations 120
time step continuity errors : sum local = 0.000235896, global = -4.03834e-05, cumulative = -4.03834e-05
smoothSolver:  Solving for epsilon, Initial residual = 0.239416, Final residual = 0.0154473, No Iterations 1
smoothSolver:  Solving for k, Initial residual = 1, Final residual = 0.0534371, No Iterations 2
ExecutionTime = 9.27 s  ClockTime = 10 s

希望使用Python提取Ux、Uy、Uz、p、epsilon和k的初始残差值,并将其存储到数组中,请问该如何实现?

解决方案

利用Python的正则表达式模块re精准匹配日志中目标变量的初始残差值,具体实现如下:

代码实现

import re

# 日志内容(若日志存于文件,替换为下方的文件读取逻辑)
log_content = """Time = 1

smoothSolver:  Solving for Ux, Initial residual = 1, Final residual = 0.0289664, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 1, Final residual = 0.028966, No Iterations 2
smoothSolver:  Solving for Uz, Initial residual = 1, Final residual = 0.0842607, No Iterations 1
GAMG:  Solving for p, Initial residual = 1, Final residual = 0.0471791, No Iterations 120
time step continuity errors : sum local = 0.000235896, global = -4.03834e-05, cumulative = -4.03834e-05
smoothSolver:  Solving for epsilon, Initial residual = 0.239416, Final residual = 0.0154473, No Iterations 1
smoothSolver:  Solving for k, Initial residual = 1, Final residual = 0.0534371, No Iterations 2
ExecutionTime = 9.27 s  ClockTime = 10 s"""

# 指定需要提取的目标变量
target_vars = ['Ux', 'Uy', 'Uz', 'p', 'epsilon', 'k']

# 正则模式:匹配变量名和对应的初始残差值
residual_pattern = re.compile(r'Solving for (\w+), Initial residual = ([\d.e-]+)')

# 存储结果的数组
initial_residuals = []

# 遍历所有匹配结果,筛选目标变量的残差值
for match in residual_pattern.finditer(log_content):
    var = match.group(1)
    if var in target_vars:
        initial_residuals.append(float(match.group(2)))

# 输出结果
print("提取的初始残差值数组:", initial_residuals)

代码说明

  1. 正则模式解析:r'Solving for (\w+), Initial residual = ([\d.e-]+)' 捕获两个关键部分:
    • (\w+):匹配变量名(如Ux、p、epsilon)
    • ([\d.e-]+):匹配初始残差值,支持整数、小数和科学计数法格式
  2. 目标变量筛选:通过target_vars列表指定需要提取的变量,只保留符合要求的残差值
  3. 文件读取适配:如果日志存储在文件中,将log_content替换为以下代码即可:
    with open('你的日志文件名.log', 'r') as f:
        log_content = f.read()
    

执行结果

运行代码后,会输出按Ux、Uy、Uz、p、epsilon、k顺序排列的初始残差值数组:

提取的初始残差值数组: [1.0, 1.0, 1.0, 1.0, 0.239416, 1.0]

内容的提问来源于stack exchange,提问作者Nico Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:29