2015-01-20 6 views
0

다음 형식의 로그 파일이 있습니다. 필자는 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 

내가 읽고있는 로그 파일 만 하나의 값이 상태 값의 첫 번째 세트는 두 번 기록되는 이유를 이해 할 수없는입니다. 이러한 유형의 복제는 전체 로그 파일이 처리 될 때 여러 값에 대해 임의로 발생합니다.

이 동작은 코드에있는 이전 변수에서 관찰되지 않습니다.

답변

0

중복 값을 얻는 이유를 추론 할 수있었습니다. 내 로그 파일에서 나는 omega의 두 인스턴스를 가지고 있으며, 따라서 내 이해가 간다면 두 번 추출했습니다. 그 트릭이 이것 이었어. if 'omega,' in line: 대신에 지금은 if 'Solving for omega,' in line:이며 문제가 해결되었습니다.

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))