首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python regex输出随机复制

Python regex输出随机复制
EN

Stack Overflow用户
提问于 2015-01-21 06:27:49
回答 1查看 40关注 0票数 0

我有一个日志文件,格式如下。我只包含了一小部分来强调我在使用Python的regex来提取一些相关信息时遇到的问题。

代码语言:javascript
复制
Time = 1

smoothSolver:  Solving for Ux, Initial residual = 0.230812, Final residual = 0.0134171, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.283614, Final residual = 0.0158797, No Iterations 3
smoothSolver:  Solving for Uz, Initial residual = 0.190444, Final residual = 0.016567, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.0850116, Final residual = 0.00375608, No Iterations 3
time step continuity errors : sum local = 0.00999678, global = 0.00142109, cumulative = 0.00142109
smoothSolver:  Solving for omega, Initial residual = 0.00267604, Final residual = 0.000166675, No Iterations 3
bounding omega, min: -26.6597 max: 18468.7 average: 219.43  
smoothSolver:  Solving for k, Initial residual = 1, Final residual = 0.0862096, No Iterations 2
ExecutionTime = 4.84 s  ClockTime = 5 s


Time = 2

smoothSolver:  Solving for Ux, Initial residual = 0.0299872, Final residual = 0.00230507, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.145767, Final residual = 0.00882969, No Iterations 3
smoothSolver:  Solving for Uz, Initial residual = 0.0863129, Final residual = 0.00858536, No Iterations 2
GAMG:  Solving for p, Initial residual = 0.394189, Final residual = 0.0175138, No Iterations 3
time step continuity errors : sum local = 0.00862823, global = 0.00212477, cumulative = 0.00354587
smoothSolver:  Solving for omega, Initial residual = 0.00258475, Final residual = 0.000222705, No Iterations 3
smoothSolver:  Solving for k, Initial residual = 0.112805, Final residual = 0.0054572, No Iterations 3
ExecutionTime = 5.9 s  ClockTime = 6 s

Time = 3

smoothSolver:  Solving for Ux, Initial residual = 0.128298, Final residual = 0.0070293, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.138825, Final residual = 0.0116437, No Iterations 3
smoothSolver:  Solving for Uz, Initial residual = 0.0798979, Final residual = 0.00491246, No Iterations 3
GAMG:  Solving for p, Initial residual = 0.108748, Final residual = 0.00429273, No Iterations 2
time step continuity errors : sum local = 0.0073211, global = -0.00187909, cumulative = 0.00166678
smoothSolver:  Solving for omega, Initial residual = 0.00238456, Final residual = 0.000224435, No Iterations 3
smoothSolver:  Solving for k, Initial residual = 0.0529661, Final residual = 0.00280851, No Iterations 3
ExecutionTime = 6.92 s  ClockTime = 7 s

我的代码如下:

代码语言:javascript
复制
# Opening the log file for reading
with open(logFile, 'r') as logfile_read:
    for line in logfile_read:
        line = line.rstrip()

        # To extract Time or iteration
        if 'Time' in line:
            iteration_time = re.findall(r'^Time\s+=\s+(.*)', line)

        # To extract local, global and cumulative values
        if 'local' in line:
            local_global_cumu = re.findall(r'sum\s+local\s+=\s+(.*),\s+global\s+=\s+(.*),\s+cumulative\s+=\s+(.*)', line)
             if local_global_cumu:
                local_global_cumu = local_global_cumu[0]
                (cont_Local, cont_Global, cont_Cumulative) = local_global_cumu
            for t in iteration_time:
                contLocal.write("%s\t%s\n" %(t, cont_Local))
                contGlobal.write("%s\t%s\n" %(t, cont_Global))
                contCumulative.write("%s\t%s\n" %(t, cont_Cumulative))

        # To extract kinetic energy residual values
        if 'k,' in line:
            kinetic_energy = re.findall(r'k,\s+Initial\s+residual\s+=\s+(.*),\s+Final\s+residual\s+=\s+(.*),\s+No\s+Iterations\s+(.*)', line)
            if kinetic_energy:
                kinetic_energy = kinetic_energy[0]
                (k_initial, k_FinalRes, k_Iters) = kinetic_energy
            for t in iteration_time:
                k.write("%s\t%s\n" %(t, k_initial))
                kFinalRes.write("%s\t%s\n" %(t, k_FinalRes))
                kIters.write("%s\t%s\n" %(t, k_Iters))

        # To extract omega residual values
        if 'omega,' in line:
            omega_values = re.findall(r'omega,\s+Initial\s+residual\s+=\s+(.*),\s+Final\s+residual\s+=\s+(.*),\s+No\s+Iterations\s+(.*)', line)
            if omega_values:
                omega_rate = omega_values[0]
                (omega_initial, omega_FinalRes, omega_Iters) = omega_rate
            for t in iteration_time:
                print ("%s\t%s\n" %(t, omega_initial))

最后一部分(提取omega残差值),omega_initial随机打印重复的值。print ("%s\t%s\n" %(t, omega_initial))的输出如下所示:

代码语言:javascript
复制
1   0.00267604

1   0.00267604

2   0.00258475

3   0.00238456

我不能理解为什么第一组值被写了两次,而正在读取的日志文件中只有一个这样的值。在处理完整的日志文件时,这种类型的复制对于许多值是随机发生的。

对于代码中存在的任何前面的变量,都不会观察到这种行为。

EN

回答 1

Stack Overflow用户

发布于 2015-01-21 06:41:06

我能够推断出为什么我得到了重复的值。在我的日志文件中,我有两个omega实例,因此它提取的内容是我理解的两倍。诀窍是这样的。我现在用if 'Solving for omega,' in line:代替了if 'omega,' in line:,这解决了问题。

代码语言:javascript
复制
if 'Solving for omega,' in line:
        omega_values = re.findall(r'omega,\s+Initial\s+residual\s+=\s+(.*),\s+Final\s+residual\s+=\s+(.*),\s+No\s+Iterations\s+(.*)', line)
        if omega_values:
            omega_rate = omega_values[0]
            (omega_initial, omega_FinalRes, omega_Iters) = omega_rate
        for t in iteration_time:
            print ("%s\t%s\n" %(t, omega_initial))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28056291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档