다음 형식의 로그 파일이 있습니다. 필자는 Python의 정규 표현식을 사용하여 관련 정보를 추출 할 때 필자가 겪고있는 문제점을 강조하기 위해 작은 부분만을 포함했습니다.파이썬 정규식 출력 임의 복사
# 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_initial
값을 중복 무작위로 인쇄하고, 다음과 같이
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
내 코드입니다. print ("%s\t%s\n" %(t, omega_initial))
의 출력은 다음과 같습니다
1 0.00267604
1 0.00267604
2 0.00258475
3 0.00238456
내가 읽고있는 로그 파일 만 하나의 값이 상태 값의 첫 번째 세트는 두 번 기록되는 이유를 이해 할 수없는입니다. 이러한 유형의 복제는 전체 로그 파일이 처리 될 때 여러 값에 대해 임의로 발생합니다.
이 동작은 코드에있는 이전 변수에서 관찰되지 않습니다.